Advertisement
akamatzu

Puppetmaster GS

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