LauEra

PUP.lua

Apr 24th, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 16.02 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', 'DPS')
  45.     state.HybridMode:options('Normal')
  46.     state.WeaponskillMode:options('Normal', 'Acc')
  47.     state.PhysicalDefenseMode:options('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 = {
  71.         ear1="Loquacious Earring",
  72.         feet="Rostrum Pumps"}
  73.  
  74.     sets.precast.FC.Utsusemi = {
  75.         ear1="Loquacious Earring",
  76.         feet="Rostrum Pumps"}
  77.  
  78.    
  79.     -- Precast sets to enhance JAs
  80.     sets.precast.JA['Repair'] = {feet="Puppetry Babouches"}
  81.  
  82.     sets.precast.JA.Maneuver = {neck="Buffoon's Collar +1",hands="Puppetry Dastanas"}
  83.  
  84.  
  85.  
  86.     -- Waltz set (chr and vit)
  87.     sets.precast.Waltz = {
  88.         main="Hades Sainti +1",
  89.         range="Turbo Animator",
  90.         ammo="Automat. Oil +2",
  91.         head={ name="Walahra Turban", augments={'"Store TP"+8',}},
  92.         body="Mahatma Hpl.",
  93.         hands="Pantin Dastanas +1",
  94.         legs="Pup. Churidars",
  95.         feet="Hermes' Sandals +1",
  96.         neck="Orochi Nodowa",
  97.         waist="Swift Belt",
  98.         left_ear={ name="Brutal Earring", augments={'"Dbl.Atk."+2','"Dbl.Atk."+1',}},
  99.         right_ear="Ethereal Earring",
  100.         left_ring="Rajas Ring",
  101.         right_ring={ name="Toreador's Ring", augments={'"Triple Atk."+2','Accuracy+1',}},
  102.         back={ name="Prism Cape", augments={'Mag. Acc.+4',}}}
  103.        
  104.     -- Don't need any special gear for Healing Waltz.
  105.     sets.precast.Waltz['Healing Waltz'] = {}
  106.  
  107.        
  108.     -- Weaponskill sets
  109.     -- Default set for any weaponskill that isn't any more specifically defined
  110.     sets.precast.WS = {
  111.         main="Hades Sainti +1",
  112.         range="Turbo Animator",
  113.         ammo="Automat. Oil +2",
  114.         head="Gnadbhod's Helm",
  115.         body="Enkidu's Harness",
  116.         hands="Enkidu's Mittens",
  117.         legs="Pantin Churidars",
  118.         feet="Enkidu's Leggings",
  119.         neck="Orochi Nodowa",
  120.         waist="Life Belt",
  121.         left_ear={ name="Brutal Earring", augments={'"Dbl.Atk."+2','"Dbl.Atk."+1',}},
  122.         right_ear="Ethereal Earring",
  123.         left_ring="Rajas Ring",
  124.         right_ring={ name="Toreador's Ring", augments={'"Triple Atk."+2','Accuracy+1',}},
  125.         back="Boxer's Mantle"}
  126.  
  127.     -- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
  128.     sets.precast.WS['Asuran Fists'] = {
  129.         main="Hades Sainti +1",
  130.         range="Turbo Animator",
  131.         ammo="Automat. Oil +2",
  132.         head="Gnadbhod's Helm",
  133.         body="Enkidu's Harness",
  134.         hands="Enkidu's Mittens",
  135.         legs="Pantin Churidars",
  136.         feet="Enkidu's Leggings",
  137.         neck="Soil Gorget",
  138.         waist="Life Belt",
  139.         left_ear={ name="Brutal Earring", augments={'"Dbl.Atk."+2','"Dbl.Atk."+1',}},
  140.         right_ear="Ethereal Earring",
  141.         left_ring="Rajas Ring",
  142.         right_ring={ name="Toreador's Ring", augments={'"Triple Atk."+2','Accuracy+1',}},
  143.         back="Boxer's Mantle"}
  144.  
  145.     sets.precast.WS['Victory Smite'] = {
  146.         main="Hades Sainti +1",
  147.         range="Turbo Animator",
  148.         ammo="Automat. Oil +2",
  149.         head="Gnadbhod's Helm",
  150.         body="Enkidu's Harness",
  151.         hands="Enkidu's Mittens",
  152.         legs="Pantin Churidars",
  153.         feet="Enkidu's Leggings",
  154.         neck="Breeze Gorget",
  155.         waist="Life Belt",
  156.         left_ear={ name="Brutal Earring", augments={'"Dbl.Atk."+2','"Dbl.Atk."+1',}},
  157.         right_ear="Ethereal Earring",
  158.         left_ring="Rajas Ring",
  159.         right_ring={ name="Toreador's Ring", augments={'"Triple Atk."+2','Accuracy+1',}},
  160.         back="Boxer's Mantle"}
  161.    
  162.     -- Midcast Sets
  163.  
  164.     sets.midcast.FastRecast = {
  165.         main="Hades Sainti +1",
  166.         range="Turbo Animator",
  167.         ammo="Automat. Oil +2",
  168.         head={ name="Walahra Turban", augments={'"Store TP"+8',}},
  169.         body="Antares Harness",
  170.         hands="Pantin Dastanas +1",
  171.         legs="Pantin Churidars",
  172.         feet="Enkidu's Leggings",
  173.         neck="Evasion Torque",
  174.         waist="Swift Belt",
  175.         left_ear={ name="Brutal Earring", augments={'"Dbl.Atk."+2','"Dbl.Atk."+1',}},
  176.         right_ear="Ethereal Earring",
  177.         left_ring="Rajas Ring",
  178.         right_ring={ name="Toreador's Ring", augments={'"Triple Atk."+2','Accuracy+1',}},
  179.         back="Boxer's Mantle"}
  180.  
  181.     -- Midcast sets for pet actions
  182.     sets.midcast.Pet.Cure = {legs="Puppetry Churidars"}
  183.  
  184.     sets.midcast.Pet['Elemental Magic'] = {legs="Pantin Churidars"}
  185.  
  186.     sets.midcast.Pet.WeaponSkill = {body="Pantin Tobe +1",}
  187.    
  188.     -- Sets to return to when not performing an action.
  189.    
  190.     -- Resting sets
  191.     sets.resting = {
  192.         main="Hades Sainti +1",
  193.         range="Turbo Animator",
  194.         ammo="Automat. Oil +2",
  195.         head="Puppetry Taj",
  196.         body="Pantin Tobe +1",
  197.         hands="Pantin Dastanas +1",
  198.         legs="Pantin Churidars",
  199.         feet="Hermes' Sandals +1",
  200.         neck="Orochi Nodowa",
  201.         waist="Swift Belt",
  202.         left_ear={ name="Brutal Earring", augments={'"Dbl.Atk."+2','"Dbl.Atk."+1',}},
  203.         right_ear="Ethereal Earring",
  204.         left_ring="Rajas Ring",
  205.         right_ring={ name="Toreador's Ring", augments={'"Triple Atk."+2','Accuracy+1',}},
  206.         back="Boxer's Mantle"}
  207.    
  208.     -- Idle sets
  209.  
  210.     sets.idle = {
  211.         main="Hades Sainti +1",
  212.         range="Turbo Animator",
  213.         ammo="Automat. Oil +2",
  214.         head="Pantin Taj +1",
  215.         body="Pantin Tobe +1",
  216.         hands="Pantin Dastanas +1",
  217.         legs="Pantin Churidars",
  218.         feet="Hermes' Sandals +1",
  219.         neck="Orochi Nodowa",
  220.         waist="Swift Belt",
  221.         left_ear={ name="Brutal Earring", augments={'"Dbl.Atk."+2','"Dbl.Atk."+1',}},
  222.         right_ear="Ethereal Earring",
  223.         left_ring="Rajas Ring",
  224.         right_ring={ name="Toreador's Ring", augments={'"Triple Atk."+2','Accuracy+1',}},
  225.         back="Boxer's Mantle"}
  226.        
  227.     sets.idle.Town = {
  228.         main="Hades Sainti +1",
  229.         range="Turbo Animator",
  230.         ammo="Automat. Oil +2",
  231.         head="Walahra Turban",
  232.         body="Pantin Tobe +1",
  233.         hands="Pantin Dastanas +1",
  234.         legs="Pantin Churidars",
  235.         feet="Hermes' Sandals +1",
  236.         neck="Faith Torque",
  237.         waist="Swift Belt",
  238.         left_ear={ name="Brutal Earring", augments={'"Dbl.Atk."+2','"Dbl.Atk."+1',}},
  239.         right_ear="Ethereal Earring",
  240.         left_ring="Rajas Ring",
  241.         right_ring={ name="Toreador's Ring", augments={'"Triple Atk."+2','Accuracy+1',}},
  242.         back="Boxer's Mantle"}
  243.  
  244.     -- Set for idle while pet is out (eg: pet regen gear)
  245.     sets.idle.Pet = sets.idle
  246.  
  247.     -- Idle sets to wear while pet is engaged
  248.     sets.idle.Pet.Engaged = {}
  249.  
  250.     sets.idle.Pet.Engaged.Ranged = set_combine(sets.idle.Pet.Engaged, {})
  251.  
  252.     sets.idle.Pet.Engaged.Nuke = set_combine(sets.idle.Pet.Engaged, {})
  253.  
  254.     sets.idle.Pet.Engaged.Magic = set_combine(sets.idle.Pet.Engaged, {})
  255.  
  256.  
  257.     -- Defense sets
  258.  
  259.     sets.defense.Evasion = {
  260.         main="Hades Sainti +1",
  261.         range="Turbo Animator",
  262.         ammo="Automat. Oil +2",
  263.         head="Optical Hat",
  264.         body="Antares Harness",
  265.         hands="Pantin Dastanas +1",
  266.         legs="Pantin Churidars",
  267.         feet="Hermes' Sandals +1",
  268.         neck="Evasion Torque",
  269.         waist="Swift Belt",
  270.         left_ear={ name="Brutal Earring", augments={'"Dbl.Atk."+2','"Dbl.Atk."+1',}},
  271.         right_ear="Ethereal Earring",
  272.         left_ring="Rajas Ring",
  273.         right_ring={ name="Toreador's Ring", augments={'"Triple Atk."+2','Accuracy+1',}},
  274.         back="Boxer's Mantle"}
  275.  
  276.     sets.Kiting = {feet="Hermes' Sandals +1"}
  277.  
  278.     -- Engaged sets
  279.  
  280.     -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
  281.     -- sets if more refined versions aren't defined.
  282.     -- If you create a set with both offense and defense modes, the offense mode should be first.
  283.     -- EG: sets.engaged.Dagger.Accuracy.Evasion
  284.    
  285.     -- Normal melee group
  286.     sets.engaged = {
  287.         main="Hades Sainti +1",
  288.         range="Turbo Animator",
  289.         ammo="Automat. Oil +2",
  290.         head={ name="Walahra Turban", augments={'"Store TP"+8',}},
  291.         body="Pantin Tobe +1",
  292.         hands="Pantin Dastanas +1",
  293.         legs="Pantin Churidars",
  294.         feet="Hermes' Sandals +1",
  295.         neck="Faith Torque",
  296.         waist="Swift Belt",
  297.         left_ear={ name="Brutal Earring", augments={'"Dbl.Atk."+2','"Dbl.Atk."+1',}},
  298.         right_ear="Ethereal Earring",
  299.         left_ring="Rajas Ring",
  300.         right_ring={ name="Toreador's Ring", augments={'"Triple Atk."+2','Accuracy+1',}},
  301.         back="Boxer's Mantle"}
  302.    
  303.     sets.engaged.Acc = {
  304.         main="Hades Sainti +1",
  305.         range="Turbo Animator",
  306.         ammo="Automat. Oil +2",
  307.         head="Enkidu's Cap",
  308.         body="Pantin Tobe +1",
  309.         hands="Enkidu's Mittens",
  310.         legs="Pantin Churidars",
  311.         feet="Hermes' Sandals +1",
  312.         neck="Peacock Amulet",
  313.         waist="Life Belt",
  314.         left_ear={ name="Brutal Earring", augments={'"Dbl.Atk."+2','"Dbl.Atk."+1',}},
  315.         right_ear="Ethereal Earring",
  316.         left_ring="Toreador's Ring",
  317.         right_ring={ name="Toreador's Ring", augments={'"Triple Atk."+2','Accuracy+1',}},
  318.         back="Boxer's Mantle"}
  319.    
  320.     sets.engaged.DPS = {
  321.         main="Hades Sainti +1",
  322.         range="Turbo Animator",
  323.         ammo="Automat. Oil +2",
  324.         head={ name="Walahra Turban", augments={'"Store TP"+8',}},
  325.         body="Enkidu's Harness",
  326.         hands="Pantin Dastanas +1",
  327.         legs="Enkidu's Subligar",
  328.         feet="Enkidu's Leggings",
  329.         neck="Faith Torque",
  330.         waist="Swift Belt",
  331.         left_ear={ name="Brutal Earring", augments={'"Dbl.Atk."+2','"Dbl.Atk."+1',}},
  332.         right_ear="Ethereal Earring",
  333.         left_ring="Rajas Ring",
  334.         right_ring={ name="Toreador's Ring", augments={'"Triple Atk."+2','Accuracy+1',}},
  335.         back="Boxer's Mantle"}
  336. end
  337.  
  338.  
  339. -------------------------------------------------------------------------------------------------------------------
  340. -- Job-specific hooks for standard casting events.
  341. -------------------------------------------------------------------------------------------------------------------
  342.  
  343. -- Called when pet is about to perform an action
  344. function job_pet_midcast(spell, action, spellMap, eventArgs)
  345.     if petWeaponskills:contains(spell.english) then
  346.         classes.CustomClass = "Weaponskill"
  347.     end
  348. end
  349.  
  350.  
  351. -------------------------------------------------------------------------------------------------------------------
  352. -- Job-specific hooks for non-casting events.
  353. -------------------------------------------------------------------------------------------------------------------
  354.  
  355. -- Called when a player gains or loses a buff.
  356. -- buff == buff gained or lost
  357. -- gain == true if the buff was gained, false if it was lost.
  358. function job_buff_change(buff, gain)
  359.     if buff == 'Wind Maneuver' then
  360.         handle_equipping_gear(player.status)
  361.     end
  362. end
  363.  
  364. -- Called when a player gains or loses a pet.
  365. -- pet == pet gained or lost
  366. -- gain == true if the pet was gained, false if it was lost.
  367. function job_pet_change(pet, gain)
  368.     update_pet_mode()
  369. end
  370.  
  371. -- Called when the pet's status changes.
  372. function job_pet_status_change(newStatus, oldStatus)
  373.     if newStatus == 'Engaged' then
  374.         display_pet_status()
  375.     end
  376. end
  377.  
  378.  
  379. -------------------------------------------------------------------------------------------------------------------
  380. -- User code that supplements standard library decisions.
  381. -------------------------------------------------------------------------------------------------------------------
  382.  
  383. -- Called by the 'update' self-command, for common needs.
  384. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  385. function job_update(cmdParams, eventArgs)
  386.     update_pet_mode()
  387. end
  388.  
  389.  
  390. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  391. function display_current_job_state(eventArgs)
  392.     display_pet_status()
  393. end
  394.  
  395.  
  396. -------------------------------------------------------------------------------------------------------------------
  397. -- User self-commands.
  398. -------------------------------------------------------------------------------------------------------------------
  399.  
  400. -- Called for custom player commands.
  401. function job_self_command(cmdParams, eventArgs)
  402.     if cmdParams[1] == 'maneuver' then
  403.         if pet.isvalid then
  404.             local man = defaultManeuvers[state.PetMode.value]
  405.             if man and tonumber(cmdParams[2]) then
  406.                 man = man[tonumber(cmdParams[2])]
  407.             end
  408.  
  409.             if man then
  410.                 send_command('input /pet "'..man..'" <me>')
  411.             end
  412.         else
  413.             add_to_chat(123,'No valid pet.')
  414.         end
  415.     end
  416. end
  417.  
  418.  
  419. -------------------------------------------------------------------------------------------------------------------
  420. -- Utility functions specific to this job.
  421. -------------------------------------------------------------------------------------------------------------------
  422.  
  423. -- Get the pet mode value based on the equipped head of the automaton.
  424. -- Returns nil if pet is not valid.
  425. function get_pet_mode()
  426.     if pet.isvalid then
  427.         return petModes[pet.head] or 'None'
  428.     else
  429.         return 'None'
  430.     end
  431. end
  432.  
  433. -- Update state.PetMode, as well as functions that use it for set determination.
  434. function update_pet_mode()
  435.     state.PetMode:set(get_pet_mode())
  436.     update_custom_groups()
  437. end
  438.  
  439. -- Update custom groups based on the current pet.
  440. function update_custom_groups()
  441.     classes.CustomIdleGroups:clear()
  442.     if pet.isvalid then
  443.         classes.CustomIdleGroups:append(state.PetMode.value)
  444.     end
  445. end
  446.  
  447. -- Display current pet status.
  448. function display_pet_status()
  449.     if pet.isvalid then
  450.         local petInfoString = pet.name..' ['..pet.head..']: '..tostring(pet.status)..'  TP='..tostring(pet.tp)..'  HP%='..tostring(pet.hpp)
  451.        
  452.         if magicPetModes:contains(state.PetMode.value) then
  453.             petInfoString = petInfoString..'  MP%='..tostring(pet.mpp)
  454.         end
  455.        
  456.         add_to_chat(122,petInfoString)
  457.     end
  458. end
  459.  
  460. -- Select default macro book on initial load or subjob change.
  461. function select_default_macro_book()
  462.     -- Default macro set/book
  463.     if player.sub_job == 'DNC' then
  464.         set_macro_page(2, 4)
  465.     elseif player.sub_job == 'NIN' then
  466.         set_macro_page(2, 4)
  467.     elseif player.sub_job == 'THF' then
  468.         set_macro_page(2, 4)
  469.     else
  470.         set_macro_page(2, 4)
  471.     end
  472. end
Advertisement
Add Comment
Please, Sign In to add comment