Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -------------------------------------------------------------------------------------------------------------------
- -- Initialization function that defines sets and variables to be used.
- -------------------------------------------------------------------------------------------------------------------
- -- IMPORTANT: Make sure to also get the Mote-Include.lua file (and its supplementary files) to go with this.
- -- Initialization function for this job file.
- function get_sets()
- mote_include_version = 2
- -- Load and initialize the include file.
- include('Mote-Include.lua')
- end
- -- Setup vars that are user-independent.
- function job_setup()
- -- List of pet weaponskills to check for
- petWeaponskills = S{"Slapstick", "Knockout", "Magic Mortar",
- "Chimera Ripper", "String Clipper", "Cannibal Blade", "Bone Crusher", "String Shredder",
- "Arcuballista", "Daze", "Armor Piercer", "Armor Shatterer"}
- -- Map automaton heads to combat roles
- petModes = {
- ['Harlequin Head'] = 'Melee',
- ['Sharpshot Head'] = 'Ranged',
- ['Valoredge Head'] = 'Tank',
- ['Stormwaker Head'] = 'Magic',
- ['Soulsoother Head'] = 'Heal',
- ['Spiritreaver Head'] = 'Nuke'
- }
- -- Subset of modes that use magic
- magicPetModes = S{'Nuke','Heal','Magic'}
- -- Var to track the current pet mode.
- state.PetMode = M{['description']='Pet Mode', 'None', 'Melee', 'Ranged', 'Tank', 'Magic', 'Heal', 'Nuke'}
- update_pet_mode()
- -- Display Mode Info as on-screen Text
- DisplayModeInfo = 'true'
- TextBoxX = 950
- TextBoxY = 47
- TextSize = 10
- display_mode_info()
- end
- -- Setup vars that are user-dependent. Can override this function in a sidecar file.
- function user_setup()
- -- Options: Override default values
- state.OffenseMode:options('Normal', 'MedAcc', 'HighAcc')
- state.HybridMode:options('Normal', 'Hybrid')
- state.WeaponskillMode:options('Normal', 'WSMedAcc', 'WSHighAcc')
- state.CastingMode:options('Normal')
- state.IdleMode:options('Normal', 'Reraise', 'Regen', 'Refresh')
- state.RestingMode:options('Normal')
- state.PhysicalDefenseMode:options('PetPDT', 'PDT')
- state.MagicalDefenseMode:options('MDTShell', 'PetMDT')
- -- 'Out of Range' distance; WS will auto-cancel
- target_distance = 7
- -- Default maneuvers 1, 2, 3 and 4 for each pet mode.
- defaultManeuvers = {
- ['Melee'] = {'Fire Maneuver', 'Thunder Maneuver', 'Wind Maneuver', 'Light Maneuver'},
- ['Ranged'] = {'Wind Maneuver', 'Fire Maneuver', 'Thunder Maneuver', 'Light Maneuver'},
- ['Tank'] = {'Earth Maneuver', 'Dark Maneuver', 'Light Maneuver', 'Wind Maneuver'},
- ['Magic'] = {'Ice Maneuver', 'Light Maneuver', 'Dark Maneuver', 'Earth Maneuver'},
- ['Heal'] = {'Light Maneuver', 'Dark Maneuver', 'Water Maneuver', 'Earth Maneuver'},
- ['Nuke'] = {'Ice Maneuver', 'Dark Maneuver', 'Light Maneuver', 'Earth Maneuver'}
- }
- send_command('@wait 5;input /lockstyleset 20')
- end
- -- Called when this job file is unloaded (eg: job change)
- function file_unload()
- if binds_on_unload then
- binds_on_unload()
- end
- -- Removes any Text Info Boxes
- send_command('text PDTModeText delete')
- send_command('text AccuracyText delete')
- end
- -- Define sets used by this job file.
- function init_gear_sets()
- Pet_PDT_head = "Anwig Salade"
- Pet_PDT_body = {name="Taeon Tabard", augments={'Pet: Mag. Evasion+22','Pet: "Regen"+3','Pet: Damage taken -4%',}}
- Pet_PDT_hands = {name="Taeon Gloves", augments={'Pet: Mag. Evasion+25','Pet: "Regen"+3','Pet: Damage taken -4%',}}
- Pet_PDT_legs = "Foire Churidars +3"
- Pet_PDT_feet = {name="Taeon Boots", augments={'Pet: Mag. Evasion+22','Pet: "Regen"+3','Pet: Damage taken -4%',}}
- Pet_PDT_back = {name="Visucius's Mantle", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Pet: "Regen"+10',}}
- Pet_Melee_head = {name="Herculean Helm", augments={'Pet: Accuracy+25 Pet: Rng. Acc.+25','Pet: "Dbl. Atk."+3','Pet: Attack+15 Pet: Rng.Atk.+15',}}
- Pet_Melee_body = {name="Herculean Vest", augments={'Pet: Accuracy+30 Pet: Rng. Acc.+30','Pet: "Dbl. Atk."+4','Pet: Attack+10 Pet: Rng.Atk.+10',}}
- Pet_Melee_hands = {name="Herculean Gloves", augments={'Pet: Accuracy+29 Pet: Rng. Acc.+29','Pet: "Dbl. Atk."+3','Pet: STR+10','Pet: "Mag.Atk.Bns."+10',}}
- Pet_Melee_legs = {name="Herculean Trousers", augments={'Pet: Accuracy+30 Pet: Rng. Acc.+30','Pet: "Store TP"+9','Pet: Attack+10 Pet: Rng.Atk.+10',}}
- Pet_Melee_feet = "Naga Kyahan"
- Pet_Melee_back = {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',}}
- Hybrid_head = {name="Taeon Chapeau", augments={'Accuracy+24','Pet: "Regen"+3','Pet: Damage taken -4%',}}
- Enmity_back = {name="Visucius's Mantle", augments={'Enmity+10',}}
- sets.PetEnmity = {head="Heyoka Cap",ear1="Rimeice Earring",ear2="Domesticator's Earring",
- body="Heyoka Harness",hands="Heyoka Mittens",
- legs="Heyoka Subligar +1",feet="Heyoka Leggings"}
- -- PRECAST GEAR SETS
- sets.precast.JA['Tactical Switch'] = {feet="Cirque Scarpe +2"}
- sets.precast.JA['Overdrive'] = {body="Pitre Tobe +1"}
- sets.precast.JA['Ventriloquy'] = {legs="Pitre Churidars +1"}
- sets.precast.JA['Role Reversal'] = {feet="Pitre Babouches +1"}
- sets.precast.JA['Repair'] = {main="Nibiru Sainti",ear1="Guignol Earring",ear2="Pratik Earring",body="Foire Tobe +1",feet="Foire Babouches +3"}
- sets.precast.JA.Maneuver = {main="Midnights",neck="Buffoon's Collar +1",body="Cirque Farsetto +2",hands="Foire Dastanas +3",
- back="Visucius's Mantle"}
- sets.precast.JA.Provoke = {main="Nibiru Sainti",
- neck="Unmoving Collar +1",ear1="Trux Earring",ear2="Cryptic Earring",
- body="Passion Jacket",hands="Kurys Gloves",ring1="Provocare Ring",ring2="Eihwaz Ring",
- back=Enmity_back,legs="Obatala Subligar",feet="Rager Ledelsens +1"}
- sets.precast.Step = {}
- sets.precast.Step['Box Step'] = {
- neck="Ziel Charm",ear1="Choreia Earring",
- body="Thaumas Coat",ring1="Rajas Ring",ring2="Oneiros Annulet",
- back="Visucius's Mantle"}
- sets.precast.Flourish1 = {}
- sets.precast.Flourish1['Violent Flourish'] = {legs="Iuitl Tights",feet="Iuitl Gaiters"}
- -- CURING/DIVINE WALTZ
- sets.precast.Waltz = {
- head="Whirlpool Mask",ear1="Roundel Earring",
- body="Otronif Harness",hands="Otronif Gloves",ring1="Spiral Ring",
- back="Iximulew Cape",legs="Nahtirah Trousers",feet="Thurandaut Boots +1"}
- -- FAST CAST PRECAST GEAR
- sets.precast.FC = {head="Haruspex Hat",ear2="Loquacious Earring",hands="Thaumas Gloves"}
- sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
- -- WEAPONSKILL SETS
- -- Default set for any weaponskill that isn't more specifically defined:
- sets.precast.WS = {
- head="Lilitu Headpiece",neck="Fotia Gorget",ear1="Moonshade Earring",ear2="Brutal Earring",
- body="Rawhide Vest",hands="Pitre Dastanas +1",ring1="Ifrit Ring +1",ring2="Spiral Ring",
- back="Rancorous Mantle",waist="Fotia Belt",legs="Foire Churidars +3",feet="Foire Babouches +3"}
- -- Specific weaponskill sets:
- sets.precast.WS['Victory Smite'] = set_combine(sets.precast.WS, {neck="Rancor Collar",ear1="Brutal Earring",ear2="Moonshade Earring",
- waist="Thunder Belt"})
- -- MIDCAST SETS
- sets.midcast.FastRecast = {
- head="Taeon Chapeau",ear1="Enchanter Earring +1",ear2="Loquacious Earring",
- body="Taeon Tabard",hands="Regimen Mittens",ring1="Prolix Ring",ring2="Defending Ring",
- legs="Taeon Tights",feet="Taeon Boots"}
- -- PET MIDCAST SETS
- sets.midcast.Pet.Cure = {legs="Foire Churidars +3"}
- -- sets.midcast.Pet.Weaponskill = {head="Karagoz Cappello",hands="Cirque Guanti +2",back="Visucius's Cape",
- -- legs="Cirque Pantaloni +2"}
- -- RESTING SETS
- sets.resting = {head="Foire Taj +1",neck="Wiglen Gorget",
- ring1="Sheltered Ring",ring2="Paguroidea Ring"}
- -- DEFENSE SETS
- sets.defense.PDT = {
- range="Animator P +1",ammo="Automat. Oil +3",
- head="Uk'uxkaj Cap",neck="Loricate Torque +1",ear1="Genmei Earring",
- body="Otronif Harness +1",hands="Kurys Gloves",ring1="Patricius Ring",ring2="Defending Ring",
- back="Umbra Cape",waist="Resolute Belt",legs="Otronif Brais +1",feet="Otronif Boots +1"}
- sets.defense.PetPDT = {main="Condemners",
- range="Animator P +1",ammo="Automat. Oil +3",
- head=Pet_PDT_head,neck="Shepherd's Chain",ear1="Rimeice Earring",ear2="Enmerkar Earring",
- body=Pet_PDT_body,hands=Pet_PDT_hands,ring1="Thurandaut Ring +1",ring2="Overbearing Ring",
- back=Pet_PDT_back,waist="Isa Belt",legs=Pet_PDT_legs,feet=Pet_PDT_feet}
- sets.defense.MDTShell = {
- range="Animator P +1",ammo="Automat. Oil +3",
- head="Uk'uxkaj Cap",neck="Loricate Torque +1",ear1="Sanare Earring",ear2="Etiolation Earring",
- body="Otronif Harness +1",hands="Otronif Gloves",ring1="Shadow Ring",ring2="Defending Ring",
- back="Solemnity Cape",waist="Resolute Belt",legs="Otronif Brais +1",feet="Otronif Boots +1"}
- sets.Kiting = {feet="Hermes' Sandals"}
- -- IDLE SET
- sets.idle = {range="Animator P +1",ammo="Automat. Oil +3",
- head="Pitre Taj +1",neck="Bathy Choker +1",ear1="Infused Earring",ear2="Dawn Earring",
- body="Otronif Harness +1",hands="Garden Bangles",ring1="Sheltered Ring",ring2="Paguroidea Ring",
- back=Pet_PDT_back,waist="Isa Belt",legs=Pet_PDT_legs,feet="Hermes' Sandals"}
- -- PET IDLE SET (eg: pet regen gear)
- sets.idle.Pet = {range="Animator P +1",ammo="Automat. Oil +3",
- head="Pitre Taj +1",neck="Empath Necklace",ear1="Rimeice Earring",ear2="Domesticator's Earring",
- body=Pet_PDT_body,hands=Pet_PDT_hands,ring1="Paguroidea Ring",ring2="Sheltered Ring",
- back=Pet_PDT_back,waist="Isa Belt",legs=Pet_PDT_legs,feet="Hermes' Sandals"}
- sets.idle.Pet.Engaged = {main="Ohtas",range="Animator P +1",ammo="Automat. Oil +3",
- head="Heyoka Cap",neck="Shulmanu Collar",ear1="Rimeice Earring",ear2="Domesticator's Earring",
- body="Heyoka Harness",hands="Heyoka Mittens",ring1="Varar Ring +1",ring2="Varar Ring +1",
- back=Pet_Melee_back,waist="Incarnation Sash",legs="Heyoka Subligar +1",feet="Heyoka Leggings"}
- --sets.AutomatonWS = {
- -- head="Karagoz Capello",neck="Empath Necklace",ear1="Ruby Earring",ear2="Domesticator's Earring",
- -- body="Pitre Tobe +1",hands=Pet_Melee_hands,ring1="Thurandaut Ring +1",ring2="Angel's Ring",
- -- back="Visucius's Mantle",waist="Incarnation Sash",legs=Pet_Melee_legs,feet=Pet_Melee_feet}
- -- ENGAGED SETS
- sets.engaged = {
- head="Lilitu Headpiece",neck="Clotharius Torque",ear1="Trux Earring",ear2="Brutal Earring",
- body="Herculean Vest",hands="Herculean Gloves",ring1="Rajas Ring",ring2="Epona's Ring",
- back="Visucius's Mantle",waist="Windbuffet Belt +1",legs="Herculean Trousers",feet="Otronif Boots +1"}
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Job-specific hooks that are called to process player actions at specific points in time.
- -------------------------------------------------------------------------------------------------------------------
- -- Called when player is about to perform an action
- function job_precast(spell, action, spellMap, eventArgs)
- if spell.english == 'Activate' then
- local abil_recasts = windower.ffxi.get_ability_recasts()
- if abil_recasts[spell.recast_id] > 0 then
- send_command('input /ja "Deus Ex Automata" <me>')
- add_to_chat(28, 'Activate timer is not ready - Using [Deus Ex Automata]!')
- eventArgs.cancel = true
- return
- end
- job_update()
- end
- if spell.type == "WeaponSkill" and spell.target.distance > target_distance then
- cancel_spell()
- add_to_chat(123, spell.name..' Canceled: [Out of Range]')
- handle_equipping_gear(player.status)
- return
- end
- end
- -- Called when pet is about to perform an action
- function job_pet_midcast(spell, action, spellMap, eventArgs)
- --if petWeaponskills:contains(spell.english) then
- -- classes.CustomClass = "Weaponskill"
- --end
- if spell.english == 'Provoke' then
- send_command('timers c "Strobe:Provoke" 30 up abilities/00002.png')
- elseif spell.english == 'Flash' then
- send_command('timers c "Flashbulb:Flash" 45 up abilities/00002.png')
- end
- --handle_equipping_gear(player.status)
- end
- function job_pet_aftercast(spell, action, spellMap, eventArgs)
- eventArgs.handled = true
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Customization hook for idle sets.
- -------------------------------------------------------------------------------------------------------------------
- function customize_idle_set(idleSet)
- return idleSet
- end
- -------------------------------------------------------------------------------------------------------------------
- -- General hooks for other game events.
- -------------------------------------------------------------------------------------------------------------------
- function job_buff_change(buff, gain)
- if buff == 'Wind Maneuver' then
- handle_equipping_gear(player.status)
- end
- end
- -- Called when a player gains or loses a pet.
- function job_pet_change(pet, gain)
- update_pet_mode()
- end
- -- Called when the pet's status changes.
- function job_pet_status_change(newStatus, oldStatus)
- if newStatus == 'Engaged' or newStatus == 'Idle' then
- handle_equipping_gear(player.status)
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- User code that supplements self-commands.
- -------------------------------------------------------------------------------------------------------------------
- -- Called any time we attempt to handle automatic gear equips (ie: engaged or idle gear).
- function job_handle_equipping_gear(playerStatus, eventArgs)
- if player.equipment.back == 'Mecisto. Mantle' or player.equipment.back == 'Aptitude Mantle' or player.equipment.back == 'Aptitude Mantle +1' or player.equipment.back == 'Nexus Cape' then
- disable('back')
- else
- enable('back')
- end
- end
- -- Called for custom player commands.
- function job_self_command(cmdParams, eventArgs)
- if cmdParams[1]:lower() == 'gearhandle' then
- handle_equipping_gear(player.status)
- end
- end
- -- Called by the 'update' self-command, for common needs.
- -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
- function job_update(cmdParams, eventArgs)
- update_pet_mode()
- update_display_mode_info()
- end
- -- Set eventArgs.handled to true if we don't want the automatic display to be run.
- function display_current_job_state(eventArgs)
- local msg = 'Melee'
- if state.CombatForm.has_value then
- msg = msg .. ' (' .. state.CombatForm.value .. ')'
- end
- msg = msg .. ': '
- msg = msg .. state.OffenseMode.value
- if state.HybridMode.value ~= 'Normal' then
- msg = msg .. '/' .. state.HybridMode.value
- end
- msg = msg .. ', WS: ' .. state.WeaponskillMode.value
- if state.DefenseMode.value ~= 'None' then
- msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
- end
- if state.Kiting.value then
- msg = msg .. ', Kiting'
- end
- add_to_chat(122, msg)
- eventArgs.handled = true
- display_pet_status()
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Utility functions specific to this job.
- -------------------------------------------------------------------------------------------------------------------
- -- Get the pet mode value based on the equipped head of the automaton.
- -- Returns nil if pet is not valid.
- function get_pet_mode()
- if pet.isvalid then
- return petModes[pet.head] or 'None'
- else
- return 'None'
- end
- end
- -- Update state.PetMode, as well as functions that use it for set determination.
- function update_pet_mode()
- state.PetMode:set(get_pet_mode())
- update_custom_groups()
- end
- -- Update custom groups based on the current pet.
- function update_custom_groups()
- classes.CustomIdleGroups:clear()
- if pet.isvalid then
- classes.CustomIdleGroups:append(state.PetMode.value)
- end
- end
- -- Display current pet status.
- function display_pet_status()
- if pet.isvalid then
- local petInfoString = pet.name..' ['..pet.head..']: '..tostring(pet.status)..' TP='..tostring(pet.tp)..' HP%='..tostring(pet.hpp)
- if magicPetModes:contains(state.PetMode) then
- petInfoString = petInfoString..' MP%='..tostring(pet.mpp)
- end
- --add_to_chat(122,petInfoString)
- end
- end
- function display_mode_info()
- if DisplayModeInfo == 'true' then
- send_command('text AccuracyText create Acc. Mode: Normal')
- send_command('text AccuracyText pos '..TextBoxX..' '..TextBoxY..'')
- send_command('text AccuracyText size '..TextSize..'')
- TextBoxY = TextBoxY + (TextSize + 6)
- send_command('text PDTModeText create PDT Mode: PetPDT')
- send_command('text PDTModeText pos '..TextBoxX..' '..TextBoxY..'')
- send_command('text PDTModeText size '..TextSize..'')
- end
- end
- function update_display_mode_info()
- if DisplayModeInfo == 'true' then
- send_command('text AccuracyText text Acc. Mode: '..state.OffenseMode.value..'')
- send_command('text PDTModeText text PDT Mode: '..state.PhysicalDefenseMode.value..'')
- end
- end
- windower.raw_register_event('action',function (act)
- local actor = windower.ffxi.get_mob_by_id(act.actor_id)
- local self = windower.ffxi.get_player()
- local target_count = act.target_count
- local category = act.category
- local param = act.param
- local recast = act.recast
- local targets = act.targets
- local primarytarget = windower.ffxi.get_mob_by_id(targets[1].id)
- local valid_target = act.valid_target
- local pet = windower.ffxi.get_mob_by_target('pet')
- -- print(actor.name,category,param)
- --[[
- [1945] = {id=1945,en="Provoke",ja="挑発"},
- [1946] = {id=1946,en="Shock Absorber",ja="S.アブソーバー"},
- [1947] = {id=1947,en="Flashbulb",ja="フラッシュバルブ"},
- ]]
- if actor and pet and actor.id == pet.id and (param == 1944 or param == 1945 or param == 1947) then
- windower.send_command('lua c gearswap c gearhandle')
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement