Advertisement
Guest User

pup.lua

a guest
May 13th, 2015
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.77 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', 'DT', 'Fodder', 'CP')
  45. state.HybridMode:options('Normal', 'DT')
  46. state.WeaponskillMode:options('Normal', 'Acc', 'Fodder')
  47. state.PhysicalDefenseMode:options('PDT', 'Evasion')
  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. -- Precast Sets
  68.  
  69. -- Fast cast sets for spells
  70. sets.precast.FC = {head="Haruspex Hat",ear2="Loquacious Earring",hands="Thaumas Gloves"}
  71.  
  72. sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  73.  
  74.  
  75. -- Precast sets to enhance JAs
  76. sets.precast.JA['Tactical Switch'] = {feet="Karagoz Scarpe"}
  77.  
  78. sets.precast.JA['Repair'] = {ammo="Automat. Oil +3", feet="Foire Babouches"}
  79.  
  80. sets.precast.JA.Maneuver = {neck="Buffoon's Collar",body="Karagoz Farsetto",hands="Pup. Dastanas +1",back="Dispersal Mantle"}
  81.  
  82.  
  83.  
  84. -- Waltz set (chr and vit)
  85. sets.precast.Waltz = {
  86. head="Whirlpool Mask",ear1="Roundel Earring",
  87. body="Otronif Harness +1",hands="Otronif Gloves",ring1="Spiral Ring",
  88. back="Iximulew Cape",legs="Nahtirah Trousers",feet="Thurandaut Boots +1"}
  89.  
  90. -- Don't need any special gear for Healing Waltz.
  91. sets.precast.Waltz['Healing Waltz'] = {}
  92.  
  93.  
  94. -- Weaponskill sets
  95. -- Default set for any weaponskill that isn't any more specifically defined
  96. sets.precast.WS = {
  97. head={ name="Taeon Chapeau", augments={'Accuracy+19','"Triple Atk."+2','VIT+10',}},
  98. body={ name="Pitre Tobe +1", augments={'Enhances "Overdrive" effect',}},
  99. hands={ name="Taeon Gloves", augments={'Accuracy+16 Attack+16','"Triple Atk."+2','Weapon skill damage +2%',}},
  100. legs={ name="Taeon Tights", augments={'Accuracy+19 Attack+19','"Triple Atk."+2','STR+7',}},
  101. feet={ name="Taeon Boots", augments={'Accuracy+16','"Triple Atk."+1','Weapon skill damage +3%',}},
  102. neck="Rancor Collar",
  103. waist="Fotia Belt",
  104. left_ear="Bladeborn Earring",
  105. right_ear="Steelflash Earring",
  106. left_ring="Rajas Ring",
  107. right_ring="Epona's Ring",
  108. back={ name="Dispersal Mantle", augments={'STR+4','Pet: TP Bonus+480','"Martial Arts"+17',}}}
  109.  
  110. -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
  111. sets.precast.WS['Stringing Pummel'] = set_combine(sets.precast.WS, {neck="Flame Gorget",ear1="Brutal Earring",ear2="Moonshade Earring",
  112. ring1="Spiral Ring",waist="Fotia Belt"})
  113. sets.precast.WS['Stringing Pummel'].Mod = set_combine(sets.precast.WS['Stringing Pummel'], {legs="Nahtirah Trousers"})
  114.  
  115. sets.precast.WS['Victory Smite'] = set_combine(sets.precast.WS, {neck="Rancor Collar",ear1="Brutal Earring",ear2="Moonshade Earring",
  116. waist="Thunder Belt"})
  117.  
  118. sets.precast.WS['Shijin Spiral'] = set_combine(sets.precast.WS, {neck="Light Gorget",waist="Light Belt"})
  119.  
  120.  
  121. -- Midcast Sets
  122.  
  123. sets.midcast.FastRecast = {
  124. head="Haruspex Hat",ear2="Loquacious Earring",
  125. body="Otronif Harness +1",hands="Regimen Mittens",
  126. legs="Manibozho Brais",feet="Otronif Boots +1"}
  127.  
  128.  
  129. -- Midcast sets for pet actions
  130. sets.midcast.Pet.Cure = {legs="Foire Churidars"}
  131.  
  132. sets.midcast.Pet['Elemental Magic'] = {feet="Pitre Babouches"}
  133.  
  134. sets.midcast.Pet.WeaponSkill = {head="Karagoz Capello", hands="Karagoz Guanti", legs="Karagoz Pantaloni",
  135. back={ name="Dispersal Mantle", augments={'STR+4','Pet: TP Bonus+480','"Martial Arts"+17',}}}
  136.  
  137.  
  138. -- Sets to return to when not performing an action.
  139.  
  140. -- Resting sets
  141. sets.resting = {head="Pitre Taj",neck="Wiglen Gorget",
  142. ring1="Sheltered Ring",ring2="Paguroidea Ring"}
  143.  
  144.  
  145. -- Idle sets
  146.  
  147. sets.idle = {range="Em. Animator",
  148. head="Pantin Taj +2",neck="Wiglen Gorget",ear1="Bladeborn Earring",ear2="Steelflash Earring",
  149. body="Pitre Tobe +1",hands="Garden Bangles",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  150. back="Contriver's Cape",waist="Windbuffet Belt",legs="Foire Churidars",feet="Hermes' Sandals"}
  151.  
  152. sets.idle.Town = set_combine(sets.idle, {main="Tinhaspa"})
  153.  
  154. -- Set for idle while pet is out (eg: pet regen gear)
  155. sets.idle.Pet = sets.idle
  156.  
  157. -- Idle sets to wear while pet is engaged
  158. sets.idle.Pet.Engaged = {
  159. head="Anwig Salade",neck="Wiglen Gorget",ear1="Handler's Earring +1",ear2="Handler's Earring",
  160. body="Pitre Tobe +1",hands="Pitre Dastanas",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  161. back="Contriver's Cape", waist="Kuku Stone",legs="Foire Churidars",feet="Foire Babouches"}
  162.  
  163. sets.idle.Pet.Engaged.Ranged = set_combine(sets.idle.Pet.Engaged, {hands="Pitre Dastanas",legs="Foire Churidars"})
  164.  
  165. sets.idle.Pet.Engaged.Nuke = set_combine(sets.idle.Pet.Engaged, {legs="Cirque Pantaloni +2",feet="Karagoz Scarpe"})
  166.  
  167. sets.idle.Pet.Engaged.Magic = set_combine(sets.idle.Pet.Engaged, {legs="Cirque Pantaloni +2",feet="Karagoz Scarpe"})
  168.  
  169.  
  170. -- Defense sets
  171.  
  172. sets.defense.Evasion = {
  173. head="Whirlpool Mask",neck="Twilight Torque",
  174. body="Otronif Harness +1",hands="Otronif Gloves",ring1="Defending Ring",ring2="Beeline Ring",
  175. back="Dispersal Mantle",waist="Hurch'lan Sash",legs="Nahtirah Trousers",feet="Otronif Boots +1"}
  176.  
  177. sets.defense.PDT = {
  178. head="Whirlpool Mask",neck="Twilight Torque",
  179. body="Otronif Harness +1",hands="Otronif Gloves",ring1="Defending Ring",ring2=gear.DarkRing.physical,
  180. back="Shadow Mantle",waist="Hurch'lan Sash",legs="Nahtirah Trousers",feet="Otronif Boots +1"}
  181.  
  182. sets.defense.MDT = {
  183. head="Whirlpool Mask",neck="Twilight Torque",
  184. body="Otronif Harness +1",hands="Otronif Gloves",ring1="Defending Ring",ring2="Shadow Ring",
  185. back="Tuilha Cape",waist="Hurch'lan Sash",legs="Nahtirah Trousers",feet="Otronif Boots +1"}
  186.  
  187. sets.Kiting = {feet="Hermes' Sandals"}
  188.  
  189. -- Engaged sets
  190.  
  191. -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
  192. -- sets if more refined versions aren't defined.
  193. -- If you create a set with both offense and defense modes, the offense mode should be first.
  194. -- EG: sets.engaged.Dagger.Accuracy.Evasion
  195.  
  196. -- Normal melee group
  197. sets.engaged = {
  198. head={ name="Taeon Chapeau", augments={'Accuracy+19','"Triple Atk."+2','VIT+10',}},
  199. body={ name="Pitre Tobe +1", augments={'Enhances "Overdrive" effect',}},
  200. hands={ name="Taeon Gloves", augments={'Accuracy+16 Attack+16','"Triple Atk."+2','Weapon skill damage +2%',}},
  201. legs={ name="Taeon Tights", augments={'Accuracy+19 Attack+19','"Triple Atk."+2','STR+7',}},
  202. feet={ name="Taeon Boots", augments={'Accuracy+16','"Triple Atk."+1','Weapon skill damage +3%',}},
  203. neck="Cirque Necklace",
  204. waist="Windbuffet Belt",
  205. left_ear="Bladeborn Earring",
  206. right_ear="Steelflash Earring",
  207. left_ring="Rajas Ring",
  208. right_ring="Epona's Ring",
  209. back={ name="Dispersal Mantle", augments={'STR+4','Pet: TP Bonus+480','"Martial Arts"+17',}}}
  210. sets.engaged.Acc = {
  211. head="Karagoz Capello",neck="Cirque Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
  212. body="Pitre Tobe +1",hands="Thur. Gloves +1",ring1="Rajas Ring",ring2="Epona's Ring",
  213. back="Dispersal Mantle",waist="Kuku Stone",legs="Karagoz Pantaloni",feet="Karagoz Scarpe"}
  214. sets.engaged.DT = {
  215. head="Otronif Mask",neck="Twilight Torque",ear1="Bladeborn Earring",ear2="Steelflash Earring",
  216. body="Pitre Tobe +1",hands="Pitre Dastanas",ring1="Rajas Ring",ring2="Epona's Ring",
  217. back="Dispersal Mantle",waist="Kuku Stone",legs="Nahtirah Trousers",feet="Otronif Boots"}
  218. sets.engaged.Acc.DT = {
  219. head="Karagoz Capello",neck="Cirque Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
  220. body="Pitre Tobe +1",hands="Pitre Dastanas",ring1="Rajas Ring",ring2="Epona's Ring",
  221. back="Dispersal Mantle",waist="Windbuffet Belt",legs="Otronif Brais",feet="Manibozho Boots"}
  222. sets.engaged.CP = {
  223. head={ name="Taeon Chapeau", augments={'Accuracy+19','"Triple Atk."+2','VIT+10',}},
  224. body={ name="Pitre Tobe +1", augments={'Enhances "Overdrive" effect',}},
  225. hands={ name="Taeon Gloves", augments={'Accuracy+16 Attack+16','"Triple Atk."+2','Weapon skill damage +2%',}},
  226. legs={ name="Taeon Tights", augments={'Accuracy+19 Attack+19','"Triple Atk."+2','STR+7',}},
  227. feet={ name="Taeon Boots", augments={'Accuracy+16','"Triple Atk."+1','Weapon skill damage +3%',}},
  228. neck="Cirque Necklace",
  229. waist="Windbuffet Belt",
  230. left_ear="Bladeborn Earring",
  231. right_ear="Steelflash Earring",
  232. left_ring="Rajas Ring",
  233. right_ring="Epona's Ring",
  234. back="Aptitude Mantle"}
  235. end
  236.  
  237.  
  238. -------------------------------------------------------------------------------------------------------------------
  239. -- Job-specific hooks for standard casting events.
  240. -------------------------------------------------------------------------------------------------------------------
  241.  
  242. -- Called when pet is about to perform an action
  243. function job_pet_midcast(spell, action, spellMap, eventArgs)
  244. if petWeaponskills:contains(spell.english) then
  245. classes.CustomClass = "Weaponskill"
  246. end
  247. end
  248.  
  249.  
  250. -------------------------------------------------------------------------------------------------------------------
  251. -- Job-specific hooks for non-casting events.
  252. -------------------------------------------------------------------------------------------------------------------
  253.  
  254. -- Called when a player gains or loses a buff.
  255. -- buff == buff gained or lost
  256. -- gain == true if the buff was gained, false if it was lost.
  257. function job_buff_change(buff, gain)
  258. if buff == 'Wind Maneuver' then
  259. handle_equipping_gear(player.status)
  260. end
  261. end
  262.  
  263. -- Called when a player gains or loses a pet.
  264. -- pet == pet gained or lost
  265. -- gain == true if the pet was gained, false if it was lost.
  266. function job_pet_change(pet, gain)
  267. update_pet_mode()
  268. end
  269.  
  270. -- Called when the pet's status changes.
  271. function job_pet_status_change(newStatus, oldStatus)
  272. if newStatus == 'Engaged' then
  273. display_pet_status()
  274. end
  275. end
  276.  
  277.  
  278. -------------------------------------------------------------------------------------------------------------------
  279. -- User code that supplements standard library decisions.
  280. -------------------------------------------------------------------------------------------------------------------
  281.  
  282. -- Called by the 'update' self-command, for common needs.
  283. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  284. function job_update(cmdParams, eventArgs)
  285. update_pet_mode()
  286. end
  287.  
  288.  
  289. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  290. function display_current_job_state(eventArgs)
  291. display_pet_status()
  292. end
  293.  
  294.  
  295. -------------------------------------------------------------------------------------------------------------------
  296. -- User self-commands.
  297. -------------------------------------------------------------------------------------------------------------------
  298.  
  299. -- Called for custom player commands.
  300. function job_self_command(cmdParams, eventArgs)
  301. if cmdParams[1] == 'maneuver' then
  302. if pet.isvalid then
  303. local man = defaultManeuvers[state.PetMode.value]
  304. if man and tonumber(cmdParams[2]) then
  305. man = man[tonumber(cmdParams[2])]
  306. end
  307.  
  308. if man then
  309. send_command('input /pet "'..man..'" <me>')
  310. end
  311. else
  312. add_to_chat(123,'No valid pet.')
  313. end
  314. end
  315. end
  316.  
  317.  
  318. -------------------------------------------------------------------------------------------------------------------
  319. -- Utility functions specific to this job.
  320. -------------------------------------------------------------------------------------------------------------------
  321.  
  322. -- Get the pet mode value based on the equipped head of the automaton.
  323. -- Returns nil if pet is not valid.
  324. function get_pet_mode()
  325. if pet.isvalid then
  326. return petModes[pet.head] or 'None'
  327. else
  328. return 'None'
  329. end
  330. end
  331.  
  332. -- Update state.PetMode, as well as functions that use it for set determination.
  333. function update_pet_mode()
  334. state.PetMode:set(get_pet_mode())
  335. update_custom_groups()
  336. end
  337.  
  338. -- Update custom groups based on the current pet.
  339. function update_custom_groups()
  340. classes.CustomIdleGroups:clear()
  341. if pet.isvalid then
  342. classes.CustomIdleGroups:append(state.PetMode.value)
  343. end
  344. end
  345.  
  346. -- Display current pet status.
  347. function display_pet_status()
  348. if pet.isvalid then
  349. local petInfoString = pet.name..' ['..pet.head..']: '..tostring(pet.status)..' TP='..tostring(pet.tp)..' HP%='..tostring(pet.hpp)
  350.  
  351. if magicPetModes:contains(state.PetMode.value) then
  352. petInfoString = petInfoString..' MP%='..tostring(pet.mpp)
  353. end
  354.  
  355. add_to_chat(122,petInfoString)
  356. end
  357. end
  358.  
  359. -- Select default macro book on initial load or subjob change.
  360. function select_default_macro_book()
  361. -- Default macro set/book
  362. if player.sub_job == 'DNC' then
  363. set_macro_page(2, 12)
  364. elseif player.sub_job == 'NIN' then
  365. set_macro_page(3, 12)
  366. elseif player.sub_job == 'THF' then
  367. set_macro_page(4, 12)
  368. else
  369. set_macro_page(1, 12)
  370. end
  371. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement