Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Modified from 'https://github.com/Kinematics/GearSwap-Jobs/blob/master/RDM.lua'
- -- Defines gearsets and job keybinds for RDM.
- -- TODO tanking setup
- -- TODO meva idle set
- -- TODO make a new moderate m.acc set for enfeebling
- texts = require('texts')
- -------------------------------------------------------------------------------------------------------------------
- -- Setup functions for this job. Generally should not be modified.
- -------------------------------------------------------------------------------------------------------------------
- -- 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. state.Buff vars initialized here will automatically be tracked.
- function job_setup()
- enable('main','sub','range','ammo','head','neck','ear1','ear2','body','hands','ring1','ring2','back','waist','legs','feet')
- state.Buff.Saboteur = buffactive.Saboteur or false
- state.Buff.Stymie = buffactive.Stymie or false
- state.Buff['Elemental Seal'] = buffactive['Elemental Seal'] or false
- state.Buff.Doom = buffactive.Doom or false
- end
- -------------------------------------------------------------------------------------------------------------------
- -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
- -------------------------------------------------------------------------------------------------------------------
- -- Setup vars that are user-dependent. Can override this function in a sidecar file.
- function user_setup()
- state.OffenseMode:options('None', 'Normal', 'Acc') -- Cycle with F9, will swap weapon
- state.HybridMode:options('Normal', 'PDef') -- Cycle with ^F9
- state.CastingMode:options('Normal', 'Resistant') -- Cycle with F10
- state.IdleMode:options('Normal', 'PDT') -- Cycle with F11
- state.CombatWeapon = M{['description']='Combat Weapon'} -- Cycle with @F9, set with !F1, !F2
- if S{'DNC','NIN'}:contains(player.sub_job) then
- state.CombatWeapon:options('Sequence','SeqEnr','OdEnr','Vamps','None')
- else
- state.CombatWeapon:options('Sequence','Enrich','Degen','Odium','Vamp1','None')
- end
- state.Seidr = M(false, 'Seidr Nukes') -- Toggle with !@z
- state.MagicBurst = M(false, 'Magic Burst') -- Toggle with !z
- init_state_text()
- -- Mote-libs handle obis, gorgets, and other elemental things.
- -- These are default fallbacks if situationally appropriate gear is not available.
- gear.default.weaponskill_neck = "Combatant's Torque" -- used in sets.precast.WS and friends
- gear.default.weaponskill_waist = "Windbuffet Belt +1" -- used in sets.precast.WS and friends
- gear.default.obi_waist = "Refoccilation Stone" -- used in nuke sets (cures overriden in job_post_midcast)
- gear.default.obi_ring = "Resonance Ring" -- used in nuke sets
- -- Augmented items get variables for convenience and specificity
- gear.darkring1 = {name="Dark Ring", augments={'Magic dmg. taken -3%','Phys. dmg. taken -6%'}}
- gear.darkring2 = {name="Dark Ring", augments={'Magic dmg. taken -4%','Breath dmg. taken -3%','Phys. dmg. taken -3%'}}
- gear.vamp1 = {name="Vampirism", augments={'STR+8','INT+9','"Occult Acumen"+8','DMG:+14'}}
- gear.vamp2 = {name="Vampirism", augments={'STR+8','INT+9','"Occult Acumen"+8','DMG:+14'}}
- gear.MerHatMB = {name="Merlinic Hood", augments={'"Mag.Atk.Bns."+27','Magic burst dmg.+10%','Mag. Acc.+15'}}
- gear.MerHatFC = {name="Merlinic Hood", augments={'Mag. Acc.+19 "Mag.Atk.Bns."+19','"Fast Cast"+6','MND+3'}}
- gear.MerBodMA = {name="Merlinic Jubbah",
- augments={'Mag. Acc.+25 "Mag.Atk.Bns."+25','"Drain" and "Aspir" potency +2','AGI+2','"Mag.Atk.Bns."+5'}}
- gear.MerFeetMB = {name="Merlinic Crackows", augments={'"Mag.Atk.Bns."+28','Magic burst dmg.+7%','DEX+10'}}
- gear.MerFeetFC = {name="Merlinic Crackows", augments={'Mag. Acc.+5','"Fast Cast"+5','"Mag.Atk.Bns."+6'}}
- gear.GrioMB = {name="Grioavolr", augments={'Magic burst dmg.+8%','INT+2','Mag. Acc.+10','"Mag.Atk.Bns."+16','Magic Damage +7'}}
- gear.GrioEnf = {name="Grioavolr", augments={'Enfb.mag. skill +10','Mag. Acc.+21','"Mag.Atk.Bns."+23','Magic Damage +7'}}
- gear.EnfCape = {name="Sucellos's Cape", augments={'MND+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Mag.Atk.Bns."+10'}}
- gear.TPCape = {name="Sucellos's Cape", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Store TP"+10'}}
- gear.WSCape = {name="Sucellos's Cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%'}}
- -- Binds overriding Mote defaults
- send_command('unbind ^F10')
- send_command('unbind ^F11')
- send_command('bind !F1 gs c reset CombatWeapon')
- send_command('bind !F2 gs c set CombatWeapon Vamps')
- send_command('bind F9 gs c cycle OffenseMode')
- send_command('bind !F9 gs c reset OffenseMode')
- send_command('bind @F9 gs c cycle CombatWeapon')
- send_command('bind !@F9 gs c cycleback CombatWeapon')
- send_command('bind F10 gs c cycle CastingMode')
- send_command('bind !F10 gs c reset CastingMode')
- send_command('bind F11 gs c cycle IdleMode')
- send_command('bind !F11 gs c reset IdleMode')
- send_command('bind !space gs c set DefenseMode Physical')
- send_command('bind @space gs c set DefenseMode Magical')
- send_command('bind !@space gs c reset DefenseMode')
- -- JA binds
- send_command('bind ^` input /ja Stymie <me>')
- send_command('bind !` input /ja Spontaneity')
- send_command('bind @` input /ja Saboteur <me>')
- send_command('bind ^@tab input /ja Composure <me>')
- send_command('bind !^` input /ja Chainspell <me>')
- -- Macrobar shadowing binds
- send_command('bind ^1 input /ma "Dia III"')
- send_command('bind ^@1 input /ma Inundation')
- send_command('bind ^2 input /ma "Slow II"')
- send_command('bind ^@2 input /ma "Gravity II" <stnpc>')
- send_command('bind ^3 input /ma "Paralyze II"')
- send_command('bind ^@3 input /ma Bind <stnpc>')
- send_command('bind ^4 input /ma Addle II')
- send_command('bind ^@4 input /ma Silence')
- send_command('bind ^5 input /ma "Sleep II" <stnpc>')
- send_command('bind ^@5 input /ma Sleep <stnpc>') -- becomes sleepga <t> /blm
- send_command('bind ^6 input /ma Break <stnpc>')
- send_command('bind ^@6 input /ma Gravity <stnpc>')
- send_command('bind ^7 input /ma Blind')
- send_command('bind !1 input /ma "Cure III" <stpc>')
- send_command('bind !2 input /ma "Cure IV" <stpc>')
- send_command('bind !3 input /ma "Distract III"')
- send_command('bind !@3 input /ma "Distract II"')
- send_command('bind !4 input /ma "Frazzle III"')
- send_command('bind !@4 input /ma "Frazzle II"')
- send_command('bind !5 input /ma "Haste II" <stpc>')
- send_command('bind !6 input /ma "Refresh III" <stpc>')
- send_command('bind !7 input /ma "Flurry II" <stpc>')
- send_command('bind !8 input /ma "Fire IV"')
- send_command('bind !9 input /ma "Blizzard IV"')
- send_command('bind !0 input /ma "Thunder IV"')
- send_command('bind @8 input /ma "Fire III"')
- send_command('bind @9 input /ma "Blizzard III"')
- send_command('bind @0 input /ma "Thunder III"')
- send_command('bind !@8 input /ma "Fire V"')
- send_command('bind !@9 input /ma "Blizzard V"')
- send_command('bind !@0 input /ma "Thunder V"')
- send_command('bind !^1 input /ws "Sanguine Blade"')
- send_command('bind !^2 input /ws "Chant du Cygne"')
- send_command('bind !^3 input /ws "Savage Blade"')
- send_command('bind !^4 input /ws "Vorpal Blade"')
- send_command('bind !^5 input /ws Requiescat')
- send_command('bind !^6 input /ws "Death Blossom"')
- -- Subjob binds
- if player.sub_job == 'WHM' then
- send_command('bind @tab input /ja "Divine Seal" <me>')
- send_command('bind !@1 input /ma "Curaga" <stpc>')
- send_command('bind !@2 input /ma "Curaga II" <stpc>')
- -- Status cure binds (never want to fumble these)
- send_command('bind @1 input /ma Poisona')
- send_command('bind @2 input /ma Paralyna')
- send_command('bind @3 input /ma Blindna')
- send_command('bind @4 input /ma Silena')
- send_command('bind @5 input /ma Stona')
- send_command('bind @6 input /ma Viruna')
- send_command('bind @7 input /ma Cursna')
- send_command('bind @F1 input /ma Erase')
- elseif player.sub_job == 'SCH' then
- send_command('bind @tab gs c penuparsi')
- send_command('bind @q gs c celeralac')
- send_command('bind ^@q gs c accemani')
- send_command('bind ^- input /ja "Light Arts" <me>') -- use twice for addendum
- send_command('bind ^= input /ja "Dark Arts" <me>')
- send_command('bind !- input /ma Drain')
- send_command('bind @- input /ma Drain')
- send_command('bind != input /ma Aspir')
- send_command('bind @= input /ma Aspir')
- send_command('bind ^!4 input /ma Klimaform <me>')
- send_command('bind ^!5 input /ma Sandstorm')
- send_command('bind ^!6 input /ma Rainstorm')
- send_command('bind ^!7 input /ma Windstorm')
- send_command('bind ^!8 input /ma Firestorm')
- send_command('bind ^!9 input /ma Hailstorm')
- send_command('bind ^!0 input /ma Thunderstorm')
- send_command('bind ^!- input /ma Aurorastorm')
- send_command('bind ^!= input /ma Voidstorm')
- -- Status cure binds (never want to fumble these)
- send_command('bind @1 input /ma Poisona')
- send_command('bind @2 input /ma Paralyna')
- send_command('bind @3 input /ma Blindna')
- send_command('bind @4 input /ma Silena')
- send_command('bind @5 input /ma Stona')
- send_command('bind @6 input /ma Viruna')
- send_command('bind @7 input /ma Cursna')
- send_command('bind @F1 input /ma Erase')
- elseif player.sub_job == 'BLM' then
- send_command('bind !d input /ma Stun')
- send_command('bind ^@` input /ja "Elemental Seal" <me>')
- send_command('bind ^@5 input /ma Sleepga')
- send_command('bind !- input /ma Drain')
- send_command('bind @- input /ma Drain')
- send_command('bind != input /ma Aspir')
- send_command('bind @= input /ma Aspir')
- elseif player.sub_job == 'DNC' then
- send_command('bind @F1 input /ja "Healing Waltz" <stpc>')
- send_command('bind @F2 input /ja "Divine Waltz" <me>')
- send_command('bind !v input /ja "Spectral Jig" <me>')
- send_command('bind !d input /ja "Animated Flourish"')
- send_command('bind !f input /ja "Haste Samba" <me>')
- send_command('bind !@f input /ja "Reverse Flourish" <me>')
- send_command('bind !e input /ja Quickstep')
- send_command('bind !@e input /ja "Box Step"')
- elseif player.sub_job == 'NIN' then
- send_command('bind !e input /ma "Utsusemi: Ni" <me>')
- send_command('bind !@e input /ma "Utsusemi: Ichi" <me>')
- elseif player.sub_job == 'SMN' then
- send_command('bind !v input //mewinglullaby')
- send_command('bind !b input //caitsith')
- send_command('bind !@b input //release')
- send_command('bind !n input //retreat')
- end
- -- Spell binds
- send_command('bind ^tab input /ma Dispel')
- send_command('bind !c input /ma Bind')
- -- Other binds
- send_command('bind !@z gs c toggle Seidr')
- send_command('bind !z gs c MagicBurst')
- select_default_macro_book()
- end
- -- Called when this job file is unloaded (eg: job change)
- -- Unset job keybinds here.
- function user_unload()
- send_command('unbind !space')
- send_command('unbind @space')
- send_command('unbind !@space')
- send_command('unbind ^tab')
- send_command('unbind ^`')
- send_command('unbind !`')
- send_command('unbind @`')
- send_command('unbind ^@tab')
- send_command('unbind !^`')
- send_command('unbind ^1')
- send_command('unbind ^2')
- send_command('unbind ^3')
- send_command('unbind ^4')
- send_command('unbind ^5')
- send_command('unbind ^6')
- send_command('unbind ^7')
- send_command('unbind ^@1')
- send_command('unbind ^@2')
- send_command('unbind ^@3')
- send_command('unbind ^@4')
- send_command('unbind ^@5')
- send_command('unbind ^@6')
- send_command('unbind !1')
- send_command('unbind !2')
- send_command('unbind !3')
- send_command('unbind !4')
- send_command('unbind !5')
- send_command('unbind !6')
- send_command('unbind !7')
- send_command('unbind !8')
- send_command('unbind !9')
- send_command('unbind !0')
- send_command('unbind @8')
- send_command('unbind @9')
- send_command('unbind @0')
- send_command('unbind !@8')
- send_command('unbind !@9')
- send_command('unbind !@0')
- send_command('unbind @tab')
- send_command('unbind @1')
- send_command('unbind @2')
- send_command('unbind @3')
- send_command('unbind @4')
- send_command('unbind @5')
- send_command('unbind @6')
- send_command('unbind @7')
- send_command('unbind @F1')
- send_command('unbind @q')
- send_command('unbind ^@q')
- send_command('unbind ^-')
- send_command('unbind ^=')
- send_command('unbind !-')
- send_command('unbind @-')
- send_command('unbind !=')
- send_command('unbind @=')
- send_command('unbind ^!1')
- send_command('unbind ^!2')
- send_command('unbind ^!3')
- send_command('unbind ^!4')
- send_command('unbind ^!5')
- send_command('unbind ^!6')
- send_command('unbind ^!7')
- send_command('unbind ^!8')
- send_command('unbind ^!9')
- send_command('unbind ^!0')
- send_command('unbind ^!-')
- send_command('unbind ^!=')
- send_command('unbind ^@`')
- send_command('unbind @F2')
- send_command('unbind !v')
- send_command('unbind !d')
- send_command('unbind !f')
- send_command('unbind !@f')
- send_command('unbind !e')
- send_command('unbind !@e')
- send_command('unbind !@z')
- send_command('unbind !z')
- send_command('unbind !c')
- destroy_state_text()
- end
- -- Define sets and vars used by this job file.
- function init_gear_sets()
- sets.weapons = {}
- sets.weapons.None = {}
- sets.weapons.Sequence = {main="Sequence",sub="Genmei Shield"}
- sets.weapons.Enrich = {main="Enriching Sword",sub="Genmei Shield"}
- sets.weapons.Degen = {main="Demersal Degen +1",sub="Genmei Shield"}
- sets.weapons.Odium = {main="Odium",sub="Genmei Shield"}
- sets.weapons.Vamp1 = {main=gear.vamp1,sub="Genmei Shield"}
- sets.weapons.SeqEnr = {main="Sequence",sub="Enriching Sword"}
- sets.weapons.OdEnr = {main="Odium",sub="Enriching Sword"}
- sets.weapons.Vamps = {main=gear.vamp1,sub=gear.vamp2}
- -- Precast Sets
- sets.precast.JA.Chainspell = {body="Vitivation Tabard +1"}
- sets.precast.Step = {ammo="Amar Cluster",
- head="Ayanmo Zucchetto +2",neck="Combatant's Torque",ear1="Telos Earring",ear2="Dignitary's Earring",
- body="Ayanmo Corazza +1",hands="Ayanmo Manopolas +1",ring1="Chirich Ring",ring2="Cacoethic Ring +1",
- back=gear.TPCape,waist="Grunfeld Rope",legs="Ayanmo Cosciales +1",feet="Ayanmo Gambieras +2"}
- sets.precast.FC = {
- head="Atrophy Chapeau +3",neck="Orunmila's Torque",ear1="Loquacious Earring",ear2="Etiolation Earring",
- body="Vitivation Tabard +1",hands="Leyline Gloves",ring2="Kishar Ring",
- waist="Channeler's Stone",legs="Psycloth Lappas",feet=gear.MerFeetFC}
- sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
- sets.impact = {head=empty,body="Twilight Cloak"}
- sets.precast.FC.Impact = set_combine(sets.precast.FC, sets.impact)
- sets.precast.WS = {ammo="Ginsen",
- head="Jhakri Coronal +2",neck=gear.ElementalGorget,ear1="Moonshade Earring",ear2="Sherida Earring",
- body="Ayanmo Corazza +1",hands="Jhakri Cuffs +2",ring1="Rufescent Ring",ring2="Hetairoi Ring",
- back=gear.WSCape,waist=gear.ElementalBelt,legs="Jhakri Slops +2",feet="Jhakri Pigaches +2"}
- sets.precast.WS.Acc = set_combine(sets.precast.WS, {ring2="Cacoethic Ring +1",back=gear.TPCape})
- sets.precast.WS['Savage Blade'] = set_combine(sets.precast.WS, {body="Jhakri Robe +2",ring2="Mujin Band"})
- -- sequence: acc~1157, att~1173, wsd+17, scb+12, da+5, ta+27~28, str+199, mnd+141 (buffed)
- sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'], {ring2="Cacoethic Ring +1"})
- sets.precast.WS['Chant du Cygne'] = set_combine(sets.precast.WS, {back=gear.TPCape,feet="Ayanmo Gambieras +2"})
- sets.precast.WS['Chant du Cygne'].Acc = set_combine(sets.precast.WS['Chant du Cygne'], {ear1="Telos Earring",ring2="Cacoethic Ring +1"})
- sets.precast.WS['Vorpal Blade'] = set_combine(sets.precast.WS['Chant du Cygne'], {ear1="Telos Earring",back=gear.WSCape})
- sets.precast.WS['Vorpal Blade'].Acc = set_combine(sets.precast.WS['Chant du Cygne'].Acc, {})
- sets.precast.WS['Aeolian Edge'] = {ammo="Pemphredo Tathlum",
- head="Jhakri Coronal +2",neck="Sanctity Necklace",ear1="Friomisi Earring",ear2="Moonshade Earring",
- body=gear.MerBodMA,hands="Chironic Gloves",ring1="Acumen Ring",ring2="Sangoma Ring",
- back=gear.EnfCape,waist=gear.ElementalBelt,legs="Jhakri Slops +2",feet="Chironic Slippers"}
- sets.precast.WS['Energy Drain'] = set_combine(sets.precast.WS['Aeolian Edge'], {waist="Refoccilation Stone"})
- sets.precast.WS['Sanguine Blade'] = set_combine(sets.precast.WS['Aeolian Edge'], {
- head="Pixie Hairpin +1",ear2="Hecate's Earring",ring2="Archon Ring",waist="Refoccilation Stone"})
- -- Midcast Sets
- sets.midcast.FastRecast = {
- head="Nahtirah Hat",neck="Loricate Torque +1",ear1="Loquacious Earring",ear2="Etiolation Earring",
- body="Vitivation Tabard +1",hands="Chironic Gloves",ring1=gear.darkring1,ring2=gear.darkring2,
- back="Perimede Cape",waist="Goading Belt",legs="Chironic Hose",feet=gear.MerFeetFC}
- sets.midcast.Cure = {main="Serenity",sub="Achaq Grip",ammo="Staunch Tathlum",
- head="Chironic Hat",neck="Nodens Gorget",ear1="Mendicant's Earring",ear2="Novia Earring",
- body="Vrikodara Jupon",hands="Kaykaus Cuffs",ring1="Sangoma Ring",ring2="Persis Ring",
- back="Solemnity Cape",waist=gear.ElementalObi,legs="Chironic Hose",feet="Chironic Slippers"}
- sets.midcast.Curaga = sets.midcast.Cure
- sets.midcast.Cure.Melee = set_combine(sets.midcast.Cure, {feet="Medium's Sabots"})
- sets.midcast.Curaga.Melee = sets.midcast.Cure.Melee
- sets.midcast.Cursna = {neck="Malison Medallion",
- body="Vitivation Tabard +1",ring1="Haoma's Ring",ring2="Haoma's Ring",feet="Vanya Clogs"}
- -- healing skill 459, cursna +45 (est. 37% success)
- sets.midcast.EnhancingDuration = {head="Telchine Cap",body="Telchine Chasuble",hands="Atrophy Gloves +1",
- back=gear.EnfCape,legs="Telchine Braconi",feet="Lethargy Houseaux +1"}
- sets.midcast['Enhancing Magic'] = {main="Serenity",sub="Achaq Grip",ammo="Homiliary",
- head="Befouled Crown",neck="Incanter's Torque",ear1="Andoaa Earring",ear2="Etiolation Earring",
- body="Vitivation Tabard +1",hands="Chironic Gloves",ring1="Stikini Ring",
- back="Perimede Cape",legs="Portent Pants",feet="Lethargy Houseaux +1"}
- -- temper2 ta+27~28
- sets.midcast.Aquaveil = set_combine(sets.midcast.EnhancingDuration, {head="Amalric Coif"})
- sets.midcast.Regen = set_combine(sets.midcast.EnhancingDuration, {main="Bolelabunga",sub="Genmei Shield",body="Telchine Chasuble"})
- sets.midcast.Refresh = set_combine(sets.midcast.EnhancingDuration, {
- head="Amalric Coif",body="Atrophy Tabard +3",legs="Lethargy Fuseau +1"})
- sets.midcast.Stoneskin = set_combine(sets.midcast.EnhancingDuration, {neck="Nodens Gorget",waist="Siegel Sash"})
- sets.midcast.FixedPotencyEnhancing = sets.midcast.EnhancingDuration
- sets.midcast.Klimaform = sets.midcast.FixedPotencyEnhancing
- sets.buff.ComposureOther = {head="Lethargy Chappel +1",body="Lethargy Sayon +1",legs="Lethargy Fuseau +1",feet="Lethargy Houseaux +1"}
- sets.midcast['Enfeebling Magic'] = {main=gear.GrioEnf,sub="Enki Strap",ammo="Regal Gem",
- head="Atrophy Chapeau +3",neck="Erra Pendant",ear1="Regal Earring",ear2="Dignitary's Earring",
- body="Atrophy Tabard +3",hands="Kaykaus Cuffs",ring1="Stikini Ring",ring2="Kishar Ring",
- back=gear.EnfCape,waist="Luminary Sash",legs="Chironic Hose",feet="Skaoi Boots"}
- sets.midcast.MndEnfeebles = set_combine(sets.midcast['Enfeebling Magic'], {body="Lethargy Sayon +1",feet="Uk'uxkaj Boots"})
- sets.midcast.IntEnfeebles = sets.midcast.MndEnfeebles
- sets.midcast.SkillEnfeebles = set_combine(sets.midcast.MndEnfeebles, {sub="Mephitis Grip",
- head="Vitivation Chapeau +1",neck="Incanter's Torque",hands="Lethargy Gantherots +1",
- waist="Rumination Sash",feet="Medium's Sabots"})
- -- enf.skill=582, m.acc+493 (sum:1075), mnd+227, effect+34 ==> -150~163 evasion
- sets.midcast.MndEnfeebles.Resistant = sets.midcast['Enfeebling Magic']
- sets.midcast.IntEnfeebles.Resistant = sets.midcast['Enfeebling Magic']
- sets.midcast.SkillEnfeebles.Resistant = sets.midcast['Enfeebling Magic']
- -- enf.skill=557, m.acc+635 (sum:1192), mnd+252, effect+20 ==> -125~137 evasion
- sets.buff.Saboteur = {hands="Lethargy Gantherots +1"}
- sets.midcast['Elemental Magic'] = {main=gear.GrioEnf,sub="Niobid Strap",ammo="Pemphredo Tathlum",
- head=gear.MerHatMB,neck="Sanctity Necklace",ear1="Regal Earring",ear2="Friomisi Earring",
- body=gear.MerBodMA,hands="Chironic Gloves",ring1="Acumen Ring",ring2=gear.ElementalRing,
- back=gear.EnfCape,waist=gear.ElementalObi,legs="Merlinic Shalwar",feet="Chironic Slippers"}
- sets.midcast['Elemental Magic'].Seidr = set_combine(sets.midcast['Elemental Magic'], {body="Seidr Cotehardie"})
- sets.midcast['Elemental Magic'].Resistant = set_combine(sets.midcast['Elemental Magic'], {sub="Enki Strap",
- head="Atrophy Chapeau +3",ear2="Dignitary's Earring",
- ring1="Stikini Ring",ring2="Resonance Ring",feet="Jhakri Pigaches +2"})
- sets.midcast.Impact = set_combine(sets.midcast['Elemental Magic'].Resistant, sets.impact)
- sets.magicburst = {main=gear.GrioMB,head=gear.MerHatMB,neck="Mizukage-no-Kubikazari",ear2="Static Earring",
- hands="Amalric Gages",ring1="Locus Ring",ring2="Mujin Band",feet="Jhakri Pigaches +2"}
- sets.magicburst.Resistant = set_combine(sets.magicburst, {head="Atrophy Chapeau +3"})
- -- mb +40%, mb2 +10%
- sets.midcast['Dark Magic'] = {main="Serenity",sub="Enki Strap",ammo="Regal Gem",
- head="Atrophy Chapeau +3",neck="Erra Pendant",ear1="Regal Earring",ear2="Dignitary's Earring",
- body="Atrophy Tabard +3",hands="Jhakri Cuffs +2",ring1="Evanescence Ring",ring2="Stikini Ring",
- back=gear.EnfCape,waist=gear.ElementalObi,legs="Chironic Hose",feet="Jhakri Pigaches +2"}
- sets.midcast.Drain = set_combine(sets.midcast['Dark Magic'], {main="Rubicundity",sub="Culminus",
- head="Pixie Hairpin +1",ring2="Archon Ring",waist="Fucho-no-Obi",feet=gear.MerFeetFC})
- sets.midcast.Aspir = sets.midcast.Drain
- sets.midcast.Aspir.Resistant = set_combine(sets.midcast.Aspir, {head="Atrophy Chapeau +3",feet="Jhakri Pigaches +2"})
- sets.midcast.Stun = set_combine(sets.midcast['Dark Magic'], {waist="Goading Belt"})
- sets.midcast.Utsusemi = {main="Mafic Cudgel",sub="Genmei Shield",ammo="Staunch Tathlum",
- head="Ayanmo Zucchetto +2",neck="Loricate Torque +1",ear1="Thureous Earring",ear2="Etiolation Earring",
- body="Ayanmo Corazza +1",hands="Ayanmo Manopolas +1",ring1=gear.darkring1,ring2=gear.darkring2,
- back="Moonbeam Cape",waist="Flume Belt +1",legs="Ayanmo Cosciales +1",feet="Ayanmo Gambieras +2"}
- -- Sets to return to when not performing an action.
- sets.idle = {main="Bolelabunga",sub="Genmei Shield",ammo="Homiliary",
- head="Vitivation Chapeau +1",neck="Loricate Torque +1",ear1="Merman's Earring",ear2="Etiolation Earring",
- body="Jhakri Robe +2",hands="Ayanmo Manopolas +1",ring1="Shneddick Ring",ring2=gear.darkring2,
- back="Umbra Cape",waist="Flume Belt +1",legs="Lengo Pants",feet="Ayanmo Gambieras +2"}
- -- refresh+9~10, pdt-34~40, def~1002, mdt-20, mdef+23, meva+341
- sets.idle.PDT = {main="Mafic Cudgel",sub="Genmei Shield",ammo="Homiliary",
- head="Vitivation Chapeau +1",neck="Loricate Torque +1",ear1="Thureous Earring",ear2="Etiolation Earring",
- body="Atrophy Tabard +3",hands="Ayanmo Manopolas +1",ring1=gear.darkring1,ring2=gear.darkring2,
- back="Moonbeam Cape",waist="Flume Belt +1",legs="Ayanmo Cosciales +1",feet="Ayanmo Gambieras +2"}
- sets.idle.PDT = set_combine(sets.idle, {main="Mafic Cudgel",
- ear1="Thureous Earring",ring1=gear.darkring1,back="Moonbeam Cape"})
- -- refresh+8~9, pdt-49, def~1101, mdt-26, mdef+23, meva+341
- sets.idle.MEVA = set_combine(sets.idle.PDT, {ammo="Staunch Tathlum"})
- sets.latent_refresh = {waist="Fucho-no-obi"}
- sets.buff.Doom = {waist="Gishdubar Sash"}
- -- Defense sets
- sets.defense.PDT = sets.idle.PDT
- sets.defense.MDT = sets.idle.MEVA
- sets.Kiting = {ring1="Shneddick Ring"}
- -- Engaged sets
- sets.engaged = set_combine({ammo="Ginsen",
- head="Ayanmo Zucchetto +2",neck="Combatant's Torque",ear1="Telos Earring",ear2="Sherida Earring",
- body="Ayanmo Corazza +1",hands="Ayanmo Manopolas +1",ring1="Chirich Ring",ring2="Hetairoi Ring",
- back=gear.TPCape,waist="Windbuffet Belt +1",legs="Ayanmo Cosciales +1",feet="Ayanmo Gambieras +2"},
- sets.weapons[state.CombatWeapon.value])
- -- sequence: acc~1205, haste+26, stp+48, da+12, ta+31~32, qa+2, pdt-27, mdt-17 (buffed)
- sets.engaged.Acc = set_combine(sets.engaged, {ammo="Amar Cluster",ear2="Dignitary's Earring",ring2="Cacoethic Ring +1"})
- -- sequence: acc~1227, haste+26, stp+43, da+7, ta+29~30, qa+2, pdt-27, mdt-17 (buffed)
- sets.engaged.PDef = set_combine(sets.engaged, {ammo="Staunch Tathlum",sub="Genmei Shield",
- neck="Loricate Torque +1",ring1=gear.darkring1,ring2="Patricius Ring",back="Umbra Cape"})
- -- Resting set
- sets.resting = set_combine(sets.idle, {main="Boonwell Staff",sub="Niobid Strap",
- neck="Eidolon Pendant",ring1=gear.darkring1,back="Felicitas Cape",waist="Shinjutsu-no-obi +1"})
- -- Sets that depend upon idle sets
- sets.midcast['Dia II'] = set_combine(sets.idle, {head="White Rarab Cap +1",ring2="Kishar Ring",waist="Chaac Belt"})
- sets.midcast['Dia III'] = set_combine(sets.idle, {head="Vitivation Chapeau +1",ring2="Kishar Ring",waist="Chaac Belt"})
- sets.midcast['Bio II'] = sets.midcast['Dia II']
- sets.midcast.Blink = set_combine(sets.idle.PDT, {ammo="Staunch Tathlum",hands="Chironic Gloves",legs="Lengo Pants"})
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Job-specific hooks for standard casting events.
- -------------------------------------------------------------------------------------------------------------------
- -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
- -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
- function job_precast(spell, action, spellMap, eventArgs)
- if spell.english == "Composure" and buffactive.Composure then
- send_command('cancel composure')
- eventArgs.cancel = true
- elseif spell.english == "Light Arts" and buffactive['Light Arts'] then
- send_command('input /ja "Addendum: White" <me>')
- eventArgs.cancel = true
- elseif S{'BarElement','BarStatus','Protect','Shell'}:contains(spellMap)
- or S{'Poison II','Flash','Stun'}:contains(spell.english) then
- -- some spells cast too quickly for precast/midcast swaps to work reliably
- eventArgs.useMidcastGear = true
- end
- end
- -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
- function job_midcast(spell, action, spellMap, eventArgs)
- -- Let these spells skip midcast sets by replacing it with the default idle set.
- -- This should make the character only blink once (for precast) rather than twice.
- if S{'Warp','Warp II','Escape'}:contains(spell.english)
- or npcs.Trust:contains(spell.english)
- or spellMap == 'Teleport' then
- if sets.idle[state.IdleMode.value] then
- equip(sets.idle[state.IdleMode.value])
- else
- equip(sets.idle)
- end
- eventArgs.handled = true
- end
- end
- -- Run after the default midcast() is done.
- -- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
- function job_post_midcast(spell, action, spellMap, eventArgs)
- if spell.skill == 'Enfeebling Magic' then
- if state.Buff.Saboteur and S{'MndEnfeebles','IntEnfeebles','SkillEnfeebles'}:contains(spellMap) then
- equip(sets.buff.Saboteur)
- end
- elseif spell.skill == 'Enhancing Magic' then
- if buffactive.Composure and S{'PLAYER','NPC'}:contains(spell.target.type) then
- if spellMap ~= 'Refresh' then
- equip(sets.buff.ComposureOther)
- end
- end
- elseif S{'Cure','Curaga'}:contains(spellMap) then
- if state.OffenseMode.value ~= 'None' then
- equip(sets.midcast[spellMap].Melee)
- end
- if gear.ElementalObi.name == gear.default.obi_waist then
- equip({waist="Channeler's Stone"})
- end
- end
- if spell.target.type == 'SELF' then
- if S{'Cure','Curaga','Refresh'}:contains(spellMap) or spell.english == 'Cursna' then
- equip({waist="Gishdubar Sash"})
- end
- end
- if spell.skill == 'Elemental Magic' then
- if state.MagicBurst.value and spell.english ~= 'Impact' then
- if state.CastingMode.value == 'Resistant' then
- equip(sets.magicburst.Resistant)
- else
- equip(sets.magicburst)
- end
- end
- if state.Seidr.value and state.CastingMode.value ~= 'Resistant' then
- equip({body="Seidr Cotehardie"})
- end
- elseif spell.skill == 'Enfeebling Magic' and (state.Buff.Stymie or state.Buff['Elemental Seal']) then
- if state.CastingMode.value == 'Resistant'
- and S{'Frazzle III','Distract III','Slow II','Addle II','Paralyze II'}:contains(spell.english) then
- equip(sets.midcast[spellMap])
- end
- end
- end
- -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
- function job_aftercast(spell, action, spellMap, eventArgs)
- if spell.interrupted then
- send_command('wait 0.5;gs c update')
- if buffactive.Amnesia and S{'JobAbility','WeaponSkill'}:contains(spell.type) then
- add_to_chat(123, 'Amnesia prevents using '..spell.english)
- elseif buffactive.Silence and S{'WhiteMagic','BlackMagic','Ninjutsu'}:contains(spell.type) then
- add_to_chat(123, 'Silence prevents using '..spell.english)
- elseif has_any_buff_of(S{'Petrification','Sleep','Stun','Terror'}) then
- add_to_chat(123, 'Status prevents using '..spell.english)
- end
- elseif S{'Break','Sleep','Sleep II','Sleepga'}:contains(spell.english) then
- local dur = 0
- if spell.english == 'Break' then
- dur = dur + 30
- elseif spell.english == 'Sleep' or spell.english == 'Sleepga' then
- dur = dur + 60
- elseif spell.english == 'Sleep II' then
- dur = dur + 90
- end
- if state.Buff.Saboteur then
- dur = math.floor(dur * 1.25) -- 1.25 for (bc)nms, 2.00 for normal monsters
- end
- if state.Buff.Stymie then
- dur = dur + 20
- end
- dur = dur + 20
- dur = math.floor(dur * 1.10) -- kishar ring
- send_command('@timers c "'..spell.english..' ['..spell.target.name..']" '..tostring(dur)..' down')
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Job-specific hooks for non-casting events.
- -------------------------------------------------------------------------------------------------------------------
- -- Called when the player's status changes.
- function job_status_change(newStatus, oldStatus, eventArgs)
- -- Don't swap to an hMP set until just before the first tick
- if newStatus == 'Resting' then
- equip(sets.idle)
- send_command('wait 18;gs c update')
- eventArgs.handled = true
- end
- end
- -- Called when a player gains or loses a buff.
- -- buff == buff gained or lost
- -- gain == true if the buff was gained, false if it was lost.
- function job_buff_change(buff, gain)
- if buff == 'Sleep' and gain then
- add_to_chat(123, 'cancelling stoneskin')
- send_command('cancel Stoneskin')
- elseif S{'Stun','Terror','Petrification','Doom'}:contains(buff) then
- if gain then
- equip(sets.idle.PDT)
- else
- handle_equipping_gear(player.status)
- end
- end
- end
- -- Handle notifications of general user state change.
- function job_state_change(stateField, newValue, oldValue)
- if stateField == 'Offense Mode' then
- enable('main','sub')
- handle_equipping_gear(player.status)
- if newValue ~= 'None' then
- equip(sets.weapons[state.CombatWeapon.value])
- disable('main','sub')
- end
- elseif stateField == 'Combat Weapon' then
- enable('main','sub')
- if state.OffenseMode.value ~= 'None' then
- equip(sets.weapons[state.CombatWeapon.value])
- if state.CombatWeapon.value ~= 'None' then
- disable('main','sub')
- end
- end
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- User code that supplements standard library decisions.
- -------------------------------------------------------------------------------------------------------------------
- -- Custom spell mapping.
- function job_get_spell_map(spell, default_spell_map)
- if spell.skill == 'Enfeebling Magic' then
- -- Spells with variable potencies, divided into dINT and dMND spells.
- -- These spells also benefit from RDM gear and WKR shoes.
- if S{'Slow','Slow II','Paralyze','Paralyze II','Addle','Addle II',
- 'Distract','Distract II','Frazzle','Frazzle II'}:contains(spell.english) then
- return "MndEnfeebles"
- elseif S{'Blind','Blind II','Gravity','Gravity II'}:contains(spell.english) then
- return "IntEnfeebles"
- elseif S{'Poison II','Distract III','Frazzle III'}:contains(spell.english) then
- return "SkillEnfeebles"
- end
- elseif spell.skill == 'Enhancing Magic' then
- if not S{'Erase','Phalanx','Stoneskin','Aquaveil','Temper','Temper II'}:contains(spell.english)
- and not S{'Regen','Refresh','BarElement','BarStatus','EnSpell','StatBoost','Teleport'}:contains(default_spell_map) then
- return "FixedPotencyEnhancing"
- end
- end
- end
- -- Modify the default idle set after it was constructed.
- function customize_idle_set(idleSet)
- if S{'Eastern Adoulin','Western Adoulin'}:contains(world.area) then
- idleSet = set_combine(idleSet, {body="Councilor's Garb"})
- end
- if player.mpp > 80 then
- idleSet = set_combine(idleSet, {ammo="Staunch Tathlum"})
- end
- if player.mpp < 51 then
- idleSet = set_combine(idleSet, sets.latent_refresh)
- end
- if buffactive['Reive Mark'] then
- idleSet = set_combine(idleSet, {neck="Arciela's Grace +1"})
- end
- if player.equipment.back == "Mecisto. Mantle" then
- idleSet = set_combine(idleSet, {ring2="Capacity Ring"})
- end
- if state.Buff.Doom then
- idleSet = set_combine(idleSet, sets.buff.Doom)
- end
- return idleSet
- end
- -- Modify the default melee set after it was constructed.
- function customize_melee_set(meleeSet)
- if buffactive['Reive Mark'] then
- meleeSet = set_combine(meleeSet, {neck="Arciela's Grace +1"})
- end
- if state.CombatWeapon.value == 'None' then
- meleeSet = sets.idle[state.IdleMode.value]
- if player.mpp < 51 then
- meleeSet = set_combine(meleeSet, sets.latent_refresh)
- end
- end
- if state.Buff.Doom then
- meleeSet = set_combine(meleeSet, sets.buff.Doom)
- end
- return meleeSet
- end
- -- Function to display the current relevant user state when doing an update.
- function display_current_job_state(eventArgs)
- local msg = ''
- eventArgs.handled = true
- if state.OffenseMode.value ~= 'None' and state.CombatWeapon.value ~= 'None' then
- msg = 'TP ['
- msg = msg .. state.CombatWeapon.value
- if state.OffenseMode.value ~= 'Normal' then
- msg = msg .. '-' .. state.OffenseMode.value
- end
- if state.HybridMode.value ~= 'Normal' then
- msg = msg .. '/' .. state.HybridMode.value
- end
- msg = msg .. '], '
- end
- msg = msg .. 'Casting ['..state.CastingMode.value..']'
- msg = msg .. ', Idle ['..state.IdleMode.value..']'
- if player.sub_job == 'SCH' then
- if buffactive['Light Arts'] or buffactive['Addendum: White'] then
- msg = msg .. ', Light Arts'
- elseif buffactive['Dark Arts'] or buffactive['Addendum: Black'] then
- msg = msg .. ', Dark Arts'
- else
- msg = msg .. ', *No Grimoire*'
- end
- end
- if state.Seidr.value then
- msg = msg .. ', Seidr'
- end
- if state.MagicBurst.value then
- msg = msg .. ', MB+'
- end
- if state.DefenseMode.value ~= 'None' then
- msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
- end
- if state.Kiting.value == true then
- msg = msg .. ', Kiting'
- end
- if state.PCTargetMode.value ~= 'default' then
- msg = msg .. ', Target PC: '..state.PCTargetMode.value
- end
- if state.SelectNPCTargets.value == true then
- msg = msg .. ', Target NPCs'
- end
- add_to_chat(122, msg)
- end
- -------------------------------------------------------------------------------------------------------------------
- -- User code that supplements self-commands.
- -------------------------------------------------------------------------------------------------------------------
- -- Called for custom player commands.
- function job_self_command(cmdParams, eventArgs)
- if player.sub_job == 'SCH' then
- if cmdParams[1] == 'penuparsi' then
- if buffactive['Light Arts'] or buffactive['Addendum: White'] then
- send_command('input /ja Penury <me>')
- elseif buffactive['Dark Arts'] or buffactive['Addendum: Black'] then
- send_command('input /ja Parsimony <me>')
- end
- eventArgs.handled = true
- elseif cmdParams[1] == 'celeralac' then
- if buffactive['Light Arts'] or buffactive['Addendum: White'] then
- send_command('input /ja Celerity <me>')
- elseif buffactive['Dark Arts'] or buffactive['Addendum: Black'] then
- send_command('input /ja Alacrity <me>')
- end
- eventArgs.handled = true
- elseif cmdParams[1] == 'accemani' then
- if buffactive['Light Arts'] or buffactive['Addendum: White'] then
- send_command('input /ja Accession <me>')
- elseif buffactive['Dark Arts'] or buffactive['Addendum: Black'] then
- send_command('input /ja Manifestation <me>')
- end
- eventArgs.handled = true
- end
- end
- if cmdParams[1] == 'MagicBurst' then
- -- custom self-command used for enabling mid-cast
- state.MagicBurst:toggle()
- if state.MagicBurst.value then
- if state.CastingMode.value == 'Resistant' then
- equip(sets.magicburst.Resistant)
- else
- equip(sets.magicburst)
- end
- add_to_chat(122,'MagicBurst is now on.')
- else
- add_to_chat(122,'MagicBurst is now off.')
- end
- end
- end
- -- Handle auto-targetting based on local setup.
- function job_auto_change_target(spell, action, spellMap, eventArgs)
- if spell.target.raw == ('<stpc>') then
- if S{'SELF','PLAYER'}:contains(player.target.type)
- or 'NPC' == player.target.type then
- if S{'Cure','Curaga','Regen'}:contains(spellMap)
- or spell.targets.Party and spell.skill == 'Enhancing Magic' then
- -- Change some spells to use <t> instead of <stpc> when already targetting a player.
- -- <stpc> macros are convenient while engaged, but add delay in backline situations.
- change_target('<t>')
- eventArgs.handled = true
- end
- end
- elseif spell.target.raw == ('<t>') and spell.targets.Enemy then
- if not player.target.name
- or S{'SELF','PLAYER'}:contains(player.target.type)
- or 'NPC' == player.target.type then
- if spell.skill ~= 'Healing Magic' then
- -- Change some enfeebles to fall back to <bt> when watching a player.
- change_target('<bt>')
- eventArgs.handled = true
- end
- end
- end
- end
- -------------------------------------------------------------------------------------------------------------------
- -- Utility functions specific to this job.
- -------------------------------------------------------------------------------------------------------------------
- -- Select default macro book on initial load or subjob change.
- function select_default_macro_book()
- set_macro_page(1,2)
- send_command('bind ^l input /lockstyleset 2')
- end
- function init_state_text()
- local mb_text_settings = {flags={draggable=false}}
- local hyb_text_settings = {pos={x=130,y=716},flags={draggable=false},bg={alpha=150},text={font='Courier New',size=10}}
- local def_text_settings = {pos={x=172,y=716},flags={draggable=false},bg={alpha=150},text={font='Courier New',size=10}}
- state.mb_text = texts.new('MBurst', mb_text_settings)
- state.hyb_text = texts.new('/${hybrid}', hyb_text_settings)
- state.def_text = texts.new('(${defense})', def_text_settings)
- state.texts_event_id = windower.register_event('prerender', function()
- state.mb_text:visible(state.MagicBurst.value)
- state.hyb_text:visible((state.HybridMode.value ~= 'Normal'))
- state.def_text:visible((state.DefenseMode.value ~= 'None'))
- state.hyb_text:update({['hybrid']=state.HybridMode.value})
- local defMode = '---'
- if state.DefenseMode.value ~= 'None' then
- defMode = state[state.DefenseMode.value ..'DefenseMode'].current
- end
- state.def_text:update({['defense']=defMode})
- end)
- end
- function destroy_state_text()
- windower.unregister_event(state.texts_event_id)
- state.mb_text:visible(false)
- state.hyb_text:visible(false)
- state.def_text:visible(false)
- texts.destroy(state.mb_text)
- texts.destroy(state.hyb_text)
- texts.destroy(state.def_text)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement