Advertisement
Kuroganashi

PUP 9-16-2016

Sep 16th, 2016
329
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 18.22 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', 'Martial_Arts', 'Hizamaru')
  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="Herculean Helm",body="Taeon Tabard",neck="Voltsurge Torque",ring1="Weatherspoon Ring",ring2="Prolix Ring",ear1="Enchntr. Earring +1",ear2="Loquacious Earring",hands="Thaumas Gloves",back="Ogapepo Cape",waist="Witful Belt",
  71.     legs="Rawhide Trousers",
  72.     feet="Regal Pumps +1"}
  73.  
  74.     sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {back="Mujin Mantle",neck="Magoraga Beads"})
  75.  
  76.    
  77.     -- Precast sets to enhance JAs
  78.     sets.precast.JA['Tactical Switch'] = {feet="Karagoz Scarpe"}
  79.    
  80.     sets.precast.JA['Repair'] = {feet="Foire Babouches +1",ear1="Guignol Earring",ear2="Pratik Earring",legs="Desultor Tassets"}
  81.  
  82.     sets.precast.JA.Maneuver = {neck="Buffoon's Collar +1",body="Karagoz Farsetto",hands="Foire Dastanas +1",back="Visucius's Mantle",ear2="Burana Earring"}
  83.  
  84.  
  85.  
  86.     -- Waltz set (chr and vit)
  87.     sets.precast.Waltz = {
  88.         head="Herculean Helm",neck="Tjukurrpa Medal",ear2="Roundel Earring",ear1="Soil Pearl",
  89.         body={ name="Rawhide Vest", augments={'DEX+10','STR+7','INT+7',}},hands="Slither Gloves +1",ring1="Titan Ring",ring2="Titan Ring",
  90.         back="Iximulew Cape",waist="Warwolf Belt",legs="Samnuha Tights",feet="Rawhide Boots"}
  91.        
  92.     -- Don't need any special gear for Healing Waltz.
  93.     sets.precast.Waltz['Healing Waltz'] = {}
  94.  
  95.        
  96.     -- Weaponskill sets
  97.     -- Default set for any weaponskill that isn't any more specifically defined
  98.     sets.precast.WS = {
  99.         head="Hizamaru Somen +1",neck="Fotia Gorget",ear1="Brutal Earring",ear2="Moonshade Earring",
  100.         body="Hiza. Haramaki +1",hands="Hizamaru Kote +1",ring1="Petrov Ring",ring2="Epona's Ring",
  101.         back="Visucius's Mantle",waist="Fotia Belt",legs="Hiza. Hizayoroi +1",feet="Hiza. Sune-ate +1"}--Dispersal Mantle
  102.  
  103.     -- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
  104.     sets.precast.WS['Stringing Pummel'] = set_combine(sets.precast.WS, {
  105.     neck="Fotia Gorget",belt="Fotia Belt",back="Rancorous Mantle",legs="Hiza. Hizayoroi +1",feet="Hiza. Sune-ate +1"})
  106.    
  107.     sets.precast.WS['Stringing Pummel'].Mod = set_combine(sets.precast.WS['Stringing Pummel'], {legs="Hiza. Hizayoroi +1"})
  108.  
  109.     sets.precast.WS['Victory Smite'] = set_combine(sets.precast.WS, {neck="Fotia Gorget",body="Hiza. Haramaki +1",waist="Fotia Belt",
  110.     legs="Hiza. Hizayoroi +1",feet="Hiza. Sune-ate +1",back="Rancorous Mantle",head="Hizamaru Somen +1"})
  111.  
  112.     sets.precast.WS['Shijin Spiral'] = set_combine(sets.precast.WS, {head="Lilitu Headpiece",body="Naga Samue",hands="Rawhide Gloves",neck="Fotia Gorget",waist="Fotia Belt"})
  113.  
  114.    
  115.     -- Midcast Sets
  116.  
  117.     sets.midcast.FastRecast = {head="Herculean Helm",body="Taeon Tabard",neck="Voltsurge Torque",ring1="Weatherspoon Ring",ring2="Prolix Ring",
  118.     ear1="Enchntr. Earring +1",ear2="Loquacious Earring",hands="Thaumas Gloves",back="Ogapepo Cape",waist="Witful Belt",
  119.     legs="Rawhide Trousers",
  120.     feet="Regal Pumps +1"}
  121.        
  122.  
  123.     -- Midcast sets for pet actions
  124.         sets.midcast.Pet.Cure = {back="Visucius's Mantle",legs="Foire Churidars +1",waist="Ukko Sash"}
  125.  
  126.         sets.midcast.Pet['Elemental Magic'] = {back="Visucius's Mantle",hands="Naga Tekko",legs="Kara. Pantaloni +1",feet="Naga Kyahan",waist="Ukko Sash"}
  127.  
  128.         sets.midcast.Pet['Enfeebling Magic'] = {back="Visucius's Mantle",hands="Naga Tekko",legs="Kara. Pantaloni +1",feet="Naga Kyahan",waist="Ukko Sash"}
  129.    
  130.         sets.midcast.Pet['Dark Magic'] = {back="Visucius's Mantle",hands="Naga Tekko",legs="Kara. Pantaloni +1",feet="Naga Kyahan",waist="Ukko Sash"}
  131.    
  132.         sets.midcast.Pet['Divine Magic'] = {back="Visucius's Mantle",hands="Naga Tekko",legs="Kara. Pantaloni +1",feet="Naga Kyahan",waist="Ukko Sash"}
  133.    
  134.         sets.midcast.Pet['Enhancing Magic'] = {back="Visucius's Mantle",hands="Naga Tekko",legs="Kara. Pantaloni +1",feet="Naga Kyahan",waist="Ukko Sash"}
  135.    
  136.     --Set for Pet Weapon Skill DMG MAX
  137.    
  138.     sets.midcast.Pet.Weaponskill = {neck="Empath Necklace",head="Karagoz Capello",body="Karagoz Farsetto",hands="Karagoz Guanti",legs="Kara. Pantaloni +1",feet="Naga Kyahan",back="Dispersal Mantle",ear2="Burana Earring",ear1="Cirque Earring",waist="Klouskap Sash",ring1="Overbearing Ring"}
  139.  
  140.    
  141.     -- Sets to return to when not performing an action.
  142.    
  143.     --Burana Earring (PUP) Maneuver effects +1 Automaton: Attack+15 Ranged Attack+15 "Magic Atk. Bonus"+10 "Regen"+2
  144.  
  145.     --Cirque Earring (PUP) Automaton: Attack+2 Ranged Attack+2 "Magic Atk. Bonus"+2
  146.    
  147.    
  148.     --Hizamaru Somen +1
  149.     --Hiza. Haramaki +1
  150.     --Hizamaru Kote +1
  151.     --Hiza. Hizayoroi +1
  152.     --Hiza. Sune-ate +1
  153.    
  154.     -- Resting sets
  155.     sets.resting = {head="Pitre Taj +1",neck="Sanctity Necklace",
  156.         ring1="Dark Ring",ring2="Defending Ring",back="Contriver's Cape",ear2="Burana Earring"}
  157.    
  158.     -- Idle sets
  159.  
  160.     sets.idle = {ammo="Automat. Oil +3",
  161.         head="Pitre Taj +1",neck="Empath Necklace",ear1="Handler's Earring +1",ear2="Burana Earring",
  162.         body="Foire Tobe +1",hands="Regimen Mittens",ring1="Matrimony Ring",ring2="Defending Ring",
  163.         back="Contriver's Cape",waist="Klouskap Sash",legs="Kara. Pantaloni +1",feet="Hermes' Sandals"}--Sanctity Necklace/Burana Earring/Shepherd's Chain
  164.  
  165.     sets.idle.Town = set_combine(sets.idle, {range="Divinator",main="Denouements"})
  166.  
  167.     -- Set for idle while pet is out (eg: pet regen gear)
  168.     sets.idle.Pet = sets.idle
  169.  
  170.     -- Idle sets to wear while pet is engaged
  171.     sets.idle.Pet.Engaged = {range="Divinator",ammo="Automat. Oil +3",
  172.         head="Pitre Taj +1",neck="Empath Necklace",ear1="Handler's Earring +1",ear2="Burana Earring",
  173.         body="Foire Tobe +1",hands="Regimen Mittens",ring1="Varar Ring",ring2="Varar Ring",
  174.         back="Visucius's Mantle",waist="Klouskap Sash",legs="Kara. Pantaloni +1",feet="Naga Kyahan"}--Handler's Earring/Burana Earring
  175.  
  176.     sets.idle.Pet.Engaged.Tank = set_combine(sets.idle.Pet.Engaged,  {range="Divinator",ammo="Automat. Oil +3",
  177.         head="Pitre Taj +1",neck="Empath Necklace",ear1="Handler's Earring +1",ear2="Handler Earring",
  178.         body="Foire Tobe +1",hands="Regimen Mittens",ring1="Varar Ring",ring2="Varar Ring",
  179.         back="Visucius's Mantle",waist="Isa Belt",legs="Kara. Pantaloni +1",feet="Naga Kyahan"})--Pet: Damage Taken set
  180.        
  181.     sets.idle.Pet.Engaged.Ranged = set_combine(sets.idle.Pet.Engaged, {range="Divinator II",neck="Empath Necklace",
  182.     hands="Regimen Mittens",legs="Kara. Pantaloni +1",ear2="Burana Earring",ear1="Cirque Earring",back="Visucius's Mantle",
  183.     waist="Klouskap Sash"})
  184.  
  185.     sets.idle.Pet.Engaged.Nuke = set_combine(sets.idle.Pet.Engaged, {range="Divinator II",
  186.     legs="Kara. Pantaloni +1",feet="Naga Kyahan",hands="Naga Tekko",
  187.     ear2="Burana Earring",ear1="Cirque Earring",back="Visucius's Mantle",
  188.     waist="Klouskap Sash"})
  189.  
  190.     sets.idle.Pet.Engaged.Heal = set_combine(sets.idle.Pet.Engaged, {range="Divinator II",
  191.     legs="Kara. Pantaloni +1",feet="Naga Kyahan",ear2="Burana Earring",ear1="Cirque Earring",back="Visucius's Mantle",
  192.     waist="Klouskap Sash"})
  193.    
  194.     sets.idle.Pet.Engaged.Magic = set_combine(sets.idle.Pet.Engaged, {range="Divinator II",
  195.     legs="Kara. Pantaloni +1",feet="Naga Kyahan",hands="Naga Tekko",
  196.     ear2="Burana Earring",ear1="Cirque Earring",back="Visucius's Mantle",
  197.     waist="Klouskap Sash"})
  198.  
  199.  
  200.     -- Defense sets
  201.  
  202.     sets.defense.Evasion = {
  203.         head="Herculean Helm",neck="Ej Necklace",ear1="Infused Earring",
  204.         body="Hiza. Haramaki +1",hands="Herculean Gloves",ring1="Varar Ring",ring2="Defending Ring",
  205.         back="Dispersal Mantle",waist="Klouskap Sash",legs="Herculean Trousers",feet="Herculean Boots"}
  206.  
  207.     sets.defense.PDT = {
  208.         head="Herculean Helm",neck="Twilight Torque",
  209.         body="Hiza. Haramaki +1",hands="Herculean Gloves",ring1="Dark Ring",ring2="Defending Ring",
  210.         back="Umbra Cape",waist="Klouskap Sash",legs="Herculean Trousers",feet="Herculean Boots"}
  211.  
  212.     sets.defense.MDT = {
  213.         head="Herculean Helm",neck="Twilight Torque",
  214.         body="Hiza. Haramaki +1",hands="Herculean Gloves",ring1="Dark Ring",ring2="Defending Ring",
  215.         back="Mollusca Mantle",waist="Klouskap Sash",legs="Ta'lab Trousers",feet="Herculean Boots"}
  216.  
  217.     sets.Kiting = {feet="Hermes' Sandals"}
  218.  
  219.     -- Engaged sets
  220.  
  221.     -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  222.     -- sets if more refined versions aren't defined.
  223.     -- If you create a set with both offense and defense modes, the offense mode should be first.
  224.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  225.    
  226.     -- Normal melee group
  227.     sets.engaged = {ammo="Automat. Oil +3",
  228.         head="Herculean Helm",neck="Asperity Necklace",ear1="Brutal Earring",ear2="Cessance Earring",
  229.         body={ name="Rawhide Vest", augments={'HP+50','"Subtle Blow"+7','"Triple Atk."+2',}},hands="Herculean Gloves",ring1="Petrov Ring",ring2="Epona's Ring",
  230.         back="Dispersal Mantle",waist="Windbuffet Belt +1",legs="Herculean Trousers",feet="Herculean Boots"}--Karagoz Guanti/Karagoz Capello/Hurch'lan Sash/Clotharius Torque/Dispersal Mantle
  231.     sets.engaged.Acc = {ammo="Automat. Oil +3",
  232.         head="Hizamaru Somen +1",neck="Ej Necklace",ear1="Steelflash Earring",ear2="Zennaroi Earring",
  233.         body="Hiza. Haramaki +1",hands="Hizamaru Kote +1",ring1="Varar Ring",ring2="Varar Ring",
  234.         back="Visucius's Mantle",waist="Klouskap Sash",legs="Hiza. Hizayoroi +1",feet="Hiza. Sune-ate +1"}
  235.     sets.engaged.Martial_Arts = {ammo="Automat. Oil +3",
  236.         head="Hizamaru Somen +1",neck="Asperity Necklace",ear1="Brutal Earring",ear2="Cessance Earring",
  237.         body={ name="Rawhide Vest", augments={'HP+50','"Subtle Blow"+7','"Triple Atk."+2',}},hands="Herculean Gloves",ring1="Petrov Ring",ring2="Epona's Ring",
  238.         back="Dispersal Mantle",waist="Klouskap Sash",legs="Kara. Pantaloni +1",feet="Herculean Boots"}
  239.     sets.engaged.Hizamaru = {ammo="Automat. Oil +3",
  240.         head="Hizamaru Somen +1",neck="Asperity Necklace",ear1="Brutal Earring",ear2="Cessance Earring",
  241.         body="Hiza. Haramaki +1",hands="Hizamaru Kote +1",ring1="Petrov Ring",ring2="Epona's Ring",
  242.         back="Dispersal Mantle",waist="Klouskap Sash",legs="Hiza. Hizayoroi +1",feet="Hiza. Sune-ate +1"}
  243.     sets.engaged.DT = {ammo="Automat. Oil +3",
  244.         head="Herculean Helm",neck="Twilight Torque",ear1="Brutal Earring",ear2="Cessance Earring",
  245.         body={ name="Rawhide Vest", augments={'HP+50','"Subtle Blow"+7','"Triple Atk."+2',}},hands="Herculean Gloves",ring1="Dark Ring",ring2="Defending Ring",
  246.         back="Umbra Cape",waist="Klouskap Sash",legs="Herculean Trousers",feet="Herculean Boots"}
  247.     sets.engaged.Acc.DT = {ammo="Automat. Oil +3",
  248.         head="Dampening Tam",neck="Twilight Torque",ear1="Steelflash Earring",ear2="Cessance Earring",
  249.         body={ name="Rawhide Vest", augments={'HP+50','"Subtle Blow"+7','"Triple Atk."+2',}},hands="Herculean Gloves",ring1="Dark Ring",ring2="Defending Ring",
  250.         back="Umbra Cape",waist="Klouskap Sash",legs={ name="Taeon Tights", augments={'Accuracy+17','"Triple Atk."+2','Crit. hit damage +3%',}},feet="Herculean Boots"}
  251. end
  252.  
  253.  
  254. -------------------------------------------------------------------------------------------------------------------
  255. -- Job-specific hooks for standard casting events.
  256. -------------------------------------------------------------------------------------------------------------------
  257.  
  258. -- Called when pet is about to perform an action
  259. function job_pet_midcast(spell, action, spellMap, eventArgs)
  260.     if petWeaponskills:contains(spell.english) then
  261.         classes.CustomClass = "Weaponskill"
  262.     end
  263. end
  264.  
  265.  
  266. -------------------------------------------------------------------------------------------------------------------
  267. -- Job-specific hooks for non-casting events.
  268. -------------------------------------------------------------------------------------------------------------------
  269.  
  270. -- Called when a player gains or loses a buff.
  271. -- buff == buff gained or lost
  272. -- gain == true if the buff was gained, false if it was lost.
  273. function job_buff_change(buff, gain)
  274.     if buff == 'Wind Maneuver' then
  275.         handle_equipping_gear(player.status)
  276.     end
  277. end
  278.  
  279. -- Called when a player gains or loses a pet.
  280. -- pet == pet gained or lost
  281. -- gain == true if the pet was gained, false if it was lost.
  282. function job_pet_change(pet, gain)
  283.     update_pet_mode()
  284. end
  285.  
  286. -- Called when the pet's status changes.
  287. function job_pet_status_change(newStatus, oldStatus)
  288.     if newStatus == 'Engaged' then
  289.         display_pet_status()
  290.     end
  291. end
  292.  
  293.  
  294. -------------------------------------------------------------------------------------------------------------------
  295. -- User code that supplements standard library decisions.
  296. -------------------------------------------------------------------------------------------------------------------
  297.  
  298. -- Called by the 'update' self-command, for common needs.
  299. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  300. function job_update(cmdParams, eventArgs)
  301.     update_pet_mode()
  302. end
  303.  
  304.  
  305. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  306. function display_current_job_state(eventArgs)
  307.     display_pet_status()
  308. end
  309.  
  310.  
  311. -------------------------------------------------------------------------------------------------------------------
  312. -- User self-commands.
  313. -------------------------------------------------------------------------------------------------------------------
  314.  
  315. -- Called for custom player commands.
  316. function job_self_command(cmdParams, eventArgs)
  317.     if cmdParams[1] == 'maneuver' then
  318.         if pet.isvalid then
  319.             local man = defaultManeuvers[state.PetMode.value]
  320.             if man and tonumber(cmdParams[2]) then
  321.                 man = man[tonumber(cmdParams[2])]
  322.             end
  323.  
  324.             if man then
  325.                 send_command('input /pet "'..man..'" <me>')
  326.             end
  327.         else
  328.             add_to_chat(123,'No valid pet.')
  329.         end
  330.     end
  331. end
  332.  
  333.  
  334. -------------------------------------------------------------------------------------------------------------------
  335. -- Utility functions specific to this job.
  336. -------------------------------------------------------------------------------------------------------------------
  337.  
  338. -- Get the pet mode value based on the equipped head of the automaton.
  339. -- Returns nil if pet is not valid.
  340. function get_pet_mode()
  341.     if pet.isvalid then
  342.         return petModes[pet.head] or 'None'
  343.     else
  344.         return 'None'
  345.     end
  346. end
  347.  
  348. -- Update state.PetMode, as well as functions that use it for set determination.
  349. function update_pet_mode()
  350.     state.PetMode:set(get_pet_mode())
  351.     update_custom_groups()
  352. end
  353.  
  354. -- Update custom groups based on the current pet.
  355. function update_custom_groups()
  356.     classes.CustomIdleGroups:clear()
  357.     if pet.isvalid then
  358.         classes.CustomIdleGroups:append(state.PetMode.value)
  359.     end
  360. end
  361.  
  362. -- Display current pet status.
  363. function display_pet_status()
  364.     if pet.isvalid then
  365.         local petInfoString = pet.name..' ['..pet.head..']: '..tostring(pet.status)..'  TP='..tostring(pet.tp)..'  HP%='..tostring(pet.hpp)
  366.        
  367.         if magicPetModes:contains(state.PetMode.value) then
  368.             petInfoString = petInfoString..'  MP%='..tostring(pet.mpp)
  369.         end
  370.        
  371.         add_to_chat(122,petInfoString)
  372.     end
  373. end
  374.  
  375. -- Select default macro book on initial load or subjob change.
  376. function select_default_macro_book()
  377.     -- Default macro set/book
  378.     if player.sub_job == 'DNC' then
  379.         set_macro_page(1, 7)
  380.     elseif player.sub_job == 'NIN' then
  381.         set_macro_page(3, 7)
  382.     elseif player.sub_job == 'THF' then
  383.         set_macro_page(4, 7)
  384.     else
  385.         set_macro_page(1, 7)
  386.     end
  387. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement