|
The 6th Ministry's Secret: A Summoner's Guide
By Acacia 2014-10-11 16:19:28
Random question: Does anyone have the snippet to put into gearswap so I don't change gears when conduit is active? I have this to skip BP delay set in precast: https://github.com/svanheulen/ffxi-gearswap/blob/master/Acacia_SMN.lua#L109
I have this to spam BP rage: https://github.com/svanheulen/ffxi-gearswap/blob/master/Acacia_SMN.lua#L174
By Cleric 2014-10-11 19:11:21
Does your gearswap have an idle set that I'm not seeing, Acacia? I tried to cut/paste your little lines into mine, but I'm still new to GS, so I failed, so I'm just merging all of my gearsets into yours and I was nitpicky and realized it didn't have a generic idle set.
By Acacia 2014-10-11 19:52:01
Does your gearswap have an idle set that I'm not seeing, Acacia? I tried to cut/paste your little lines into mine, but I'm still new to GS, so I failed, so I'm just merging all of my gearsets into yours and I was nitpicky and realized it didn't have a generic idle set. Nope, I just use my perp set as idle.
Edit: I also have over 500 Summoning magic in my perp set so I use it for buff BPs as well. So you might need to change that.
By Cleric 2014-10-11 20:00:25
How would I go about adding an idle setup to that gearswap?
:( I can't seem to find a gearswap that does everything my spellcast used to do. And I don't understand code enough to write one myself.
By Cleric 2014-10-11 20:07:44
Code -------------------------------------------------------------------------------------------------------------------
-- Initialization function that defines sets and variables to be used.
-------------------------------------------------------------------------------------------------------------------
-- IMPORTANT: Make sure to also get the Mote-Include.lua file (and it's supplementary files) to go with this.
-- Also, you'll need the Shortcuts addon to handle the auto-targetting of the custom pact commands.
--[[
Custom commands:
gs c petweather
Automatically casts the storm appropriate for the current avatar, if possible.
gs c siphon
Automatically run the process to: dismiss the current avatar; cast appropriate
weather; summon the appropriate spirit; Elemental Siphon; release the spirit;
and re-summon the avatar.
Will not cast weather you do not have access to.
Will not re-summon the avatar if one was not out in the first place.
Will not release the spirit if it was out before the command was issued.
gs c pact [PactType]
Attempts to use the indicated pact type for the current avatar.
PactType can be one of:
cure
curaga
buffOffense
buffDefense
buffSpecial
debuff1
debuff2
sleep
nuke2
nuke4
bp70
bp75 (merits and lvl 75-80 pacts)
astralflow
--]]
-- Initialization function for this job file.
function get_sets()
-- Load and initialize the include file.
include('Mote-Include.lua')
end
-- Setup vars that are user-independent.
function job_setup()
state.Buff["Avatar's Favor"] = buffactive["Avatar's Favor"] or false
spirits = S{"LightSpirit", "DarkSpirit", "FireSpirit", "EarthSpirit", "WaterSpirit", "AirSpirit", "IceSpirit", "ThunderSpirit"}
avatars = S{"Carbuncle", "Fenrir", "Diabolos", "Ifrit", "Titan", "Leviathan", "Garuda", "Shiva", "Ramuh", "Odin", "Alexander", "Cait Sith"}
magicalRagePacts = S{
'Inferno','Earthen Fury','Tidal Wave','Aerial Blast','Diamond Dust','Judgement Bolt','Searing Light','Howling Moon','Ruinous Omen',
'Fire II','Stone II','Water II','Aero II','Blizzard II','Thunder II',
'Fire IV','Stone IV','Water IV','Aero IV','Blizzard IV','Thunder IV',
'Thunderspark','Burning Strike','Meteorite','Nether Blast','Flaming Crush',
'Meteor Strike','Heavenly Strike','Wind Blade','Geocrush','Grand Fall','Thunderstorm',
'Holy Mist','Lunar Bay','Night Terror','Level ? Holy'}
pacts = {}
pacts.cure = {['Carbuncle']='Healing Ruby'}
pacts.curaga = {['Carbuncle']='Healing Ruby II', ['Garuda']='Whispering Wind', ['Leviathan']='Spring Water'}
pacts.buffoffense = {['Carbuncle']='Glittering Ruby', ['Ifrit']='Crimson Howl', ['Garuda']='Hastega', ['Ramuh']='Rolling Thunder',
['Fenrir']='Ecliptic Growl'}
pacts.buffdefense = {['Carbuncle']='Shining Ruby', ['Shiva']='Frost Armor', ['Garuda']='Aerial Armor', ['Titan']='Earthen Ward',
['Ramuh']='Lightning Armor', ['Fenrir']='Ecliptic Howl', ['Diabolos']='Noctoshield', ['Cait Sith']='Reraise II'}
pacts.buffspecial = {['Ifrit']='Inferno Howl', ['Garuda']='Fleet Wind', ['Titan']='Earthen Armor', ['Diabolos']='Dream Shroud',
['Carbuncle']='Soothing Ruby', ['Fenrir']='Heavenward Howl', ['Cait Sith']='Raise II'}
pacts.debuff1 = {['Shiva']='Diamond Storm', ['Ramuh']='Shock Squall', ['Leviathan']='Tidal Roar', ['Fenrir']='Lunar Cry',
['Diabolos']='Pavor Nocturnus', ['Cait Sith']='Eerie Eye'}
pacts.debuff2 = {['Shiva']='Sleepga', ['Leviathan']='Slowga', ['Fenrir']='Lunar Roar', ['Diabolos']='Somnolence'}
pacts.sleep = {['Shiva']='Sleepga', ['Diabolos']='Nightmare', ['Cait Sith']='Mewing Lullaby'}
pacts.nuke2 = {['Ifrit']='Fire II', ['Shiva']='Blizzard II', ['Garuda']='Aero II', ['Titan']='Stone II',
['Ramuh']='Thunder II', ['Leviathan']='Water II'}
pacts.nuke4 = {['Ifrit']='Fire IV', ['Shiva']='Blizzard IV', ['Garuda']='Aero IV', ['Titan']='Stone IV',
['Ramuh']='Thunder IV', ['Leviathan']='Water IV'}
pacts.bp70 = {['Ifrit']='Flaming Crush', ['Shiva']='Rush', ['Garuda']='Predator Claws', ['Titan']='Mountain Buster',
['Ramuh']='Chaotic Strike', ['Leviathan']='Spinning Dive', ['Carbuncle']='Meteorite', ['Fenrir']='Eclipse Bite',
['Diabolos']='Nether Blast',['Cait Sith']='Regal Scratch'}
pacts.bp75 = {['Ifrit']='Meteor Strike', ['Shiva']='Heavenly Strike', ['Garuda']='Wind Blade', ['Titan']='Geocrush',
['Ramuh']='Thunderstorm', ['Leviathan']='Grand Fall', ['Carbuncle']='Holy Mist', ['Fenrir']='Lunar Bay',
['Diabolos']='Night Terror', ['Cait Sith']='Level ? Holy'}
pacts.astralflow = {['Ifrit']='Inferno', ['Shiva']='Diamond Dust', ['Garuda']='Aerial Blast', ['Titan']='Earthen Fury',
['Ramuh']='Judgment Bolt', ['Leviathan']='Tidal Wave', ['Carbuncle']='Searing Light', ['Fenrir']='Howling Moon',
['Diabolos']='Ruinous Omen', ['Cait Sith']="Altana's Favor"}
-- Wards table for creating custom timers
wards = {}
-- Base duration for ward pacts.
wards.durations = {
['Crimson Howl'] = 60, ['Earthen Armor'] = 60, ['Inferno Howl'] = 60, ['Heavenward Howl'] = 60,
['Rolling Thunder'] = 120, ['Fleet Wind'] = 120,
['Shining Ruby'] = 180, ['Frost Armor'] = 180, ['Lightning Armor'] = 180, ['Ecliptic Growl'] = 180,
['Glittering Ruby'] = 180, ['Hastega'] = 180, ['Noctoshield'] = 180, ['Ecliptic Howl'] = 180,
['Dream Shroud'] = 180,
['Reraise II'] = 3600
}
-- Icons to use when creating the custom timer.
wards.icons = {
['Earthen Armor'] = 'spells/00299.png', -- 00299 for Titan
['Shining Ruby'] = 'spells/00043.png', -- 00043 for Protect
['Dream Shroud'] = 'spells/00304.png', -- 00304 for Diabolos
['Noctoshield'] = 'spells/00106.png', -- 00106 for Phalanx
['Inferno Howl'] = 'spells/00298.png', -- 00298 for Ifrit
['Hastega'] = 'spells/00358.png', -- 00358 for Hastega
['Rolling Thunder'] = 'spells/00104.png', -- 00358 for Enthunder
['Frost Armor'] = 'spells/00250.png', -- 00250 for Ice Spikes
['Lightning Armor'] = 'spells/00251.png', -- 00251 for Shock Spikes
['Reraise II'] = 'spells/00135.png', -- 00135 for Reraise
['Fleet Wind'] = 'abilities/00074.png', --
}
-- Flags for code to get around the issue of slow skill updates.
wards.flag = false
wards.spell = ''
end
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
-- Options: Override default values
options.OffenseModes = {'Normal', 'Acc'}
options.DefenseModes = {'Normal'}
options.WeaponskillModes = {'Normal'}
options.CastingModes = {'Normal', 'Resistant'}
options.IdleModes = {'Normal'}
options.RestingModes = {'Normal'}
options.PhysicalDefenseModes = {'PDT'}
options.MagicalDefenseModes = {'MDT'}
state.Defense.PhysicalMode = 'PDT'
gear.perp_staff = {name=""}
select_default_macro_book()
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Precast Sets
--------------------------------------
-- Precast sets to enhance JAs
sets.precast.JA['Astral Flow'] = {head="Glyphic Horn +1"}
sets.precast.JA['Elemental Siphon'] = {main="Soulscourge",
head="Caller's Horn +2",neck="Caller's Pendant",
body="Anhur Robe",hands="Smn. Bracers +2",ring1="Evoker's Ring",ring2="Fervor Ring",
back="Conveyance Cape",
legs="Ngen Seraweels" ,feet="Caller's Pigaches +2", waist="Summoning Belt", sub="Vox Grip"}
sets.precast.JA['Mana Cede'] = {}
-- Pact delay reduction gear
sets.precast.BloodPactWard = {ammo="Seraphicaller",head="Glyphic Horn +1",hands="Smn. Bracers +2",
back="Tiresias' Cape", feet="Smn. Pigaches +2", body="Glyphic Doublet"}
sets.precast.BloodPactRage = {ammo="Seraphicaller",head="Glyphic Horn +1",hands="Smn. Bracers +2",
back="Tiresias' Cape", feet="Smn. Pigaches +2", body="Glyphic Doublet"}
-- Fast cast sets for spells
sets.precast.FC = {
head="Nahtirah Hat",ear2="Loquacious Earring",
body="Anhur Robe", hands="Magavan Mitts", neck="Jeweled Collar",
back="Swith Cape",waist="Witful Belt",legs="Orvail Pants",feet="Chelona Boots"}
sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash"})
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {body="Hagondes Coat +1"}
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
sets.precast.WS['Myrkr'] = {body="Hagondes Coat +1"}
--------------------------------------
-- Midcast sets
--------------------------------------
sets.midcast.FastRecast = {
head="Nahtirah Hat",ear2="Loquacious Earring",
body="Hagondes Coat +1",hands="Bokwus Gloves", neck="Jeweled Collar",
back="Swith Cape",waist="Witful Belt",legs="Hagondes Pants",feet="Hagondes Sabots"}
sets.midcast.Cure = {main="Tamaxchi",sub="Genbu's Shield",
head="Nahtirah Hat",ear2="Loquacious Earring",
body="Heka's Kalasiris",hands="Bokwus Gloves",ring2="Sirona's Ring",
back="Swith Cape",waist="Witful Belt",legs="Nares Trews",feet="Hagondes Sabots"}
sets.midcast.Stoneskin = {waist="Siegel Sash", ear1="Earthcry Earring"}
sets.midcast['Elemental Magic'] = {main="Balsam Staf"}
sets.midcast['Dark Magic'] = {main="Balsam Staff"}
-- Avatar pact sets. All pacts are Ability type.
sets.midcast.Pet.BloodPactWard = {main="Soulscourge",ammo="Seraphicaller",
head="Caller's Horn +2",neck="Caller's Pendant",
body="Anhur Robe",hands="Smn. Bracers +2",ring1="Evoker's Ring",ring2="Fervor Ring",
waist="Summoning Belt",legs="Ngen Seraweels", feet="Shedir Crackows",
rear="Esper Earring", lear="Diamond Earring", sub="Vox Grip",
lring="Evoker's Ring", rring="Fervor Ring", back="Conveyance Cape"}
sets.midcast.Pet.DebuffBloodPactWard = {main="Soulscourge",ammo="Seraphicaller",
head="Caller's Horn +2",neck="Caller's Pendant",
body="Anhur Robe",hands="Smn. Bracers +2",ring1="Evoker's Ring",ring2="Fervor Ring",
waist="Summoning Belt",legs="Ngen Seraweels", feet="Shedir Crackows",
rear="Esper Earring", lear="Diamond Earring", sub="Vox Grip", back="Conveyance Cape",
lring="Evoker's Ring", rring="Fervor Ring"}
sets.midcast.Pet.DebuffBloodPactWard.Acc = sets.midcast.Pet.DebuffBloodPactWard
sets.midcast.Pet.PhysicalBloodPactRage = {main="Gridarvor",ammo="Seraphicaller",
head="Caller's Horn +2",neck="Sacrice Torque",
body="Call. Doublet +2" ,hands="Smn. Bracers +2",ring1="Evoker's Ring",ring2="Fervor Ring",
waist="Summoning Belt",legs="Ngen Seraweels", feet="Shedir Crackows",
rear="Esper Earring", lear="Gifted Earring", sub="Vox Grip",
lring="Evoker's Ring", rring="Fervor Ring", back="Samanisi Cape"}
sets.midcast.Pet.PhysicalBloodPactRage.Acc = sets.midcast.Pet.PhysicalBloodPactRage
sets.midcast.Pet.MagicalBloodPactRage = {main="Balsam Staff",ammo="Seraphicaller",
head="Glyphic Horn +1",neck="Eidolon Pendant", back="Tiresias' Cape",
body="Call. Doublet +2" ,hands="Hagondes Cuffs",ring1="Evoker's Ring",ring2="Fervor Ring",
waist="Caller's Sash",legs="Caller's Spats +2", feet="Hagondes Sabots",
rear="Esper Earring", lear="Gifted Earring", sub="Vox Grip",
lring="Evoker's Ring", rring="Fervor Ring"}
sets.midcast.Pet.MagicalBloodPactRage.Acc = sets.midcast.Pet.MagicalBloodPactRage
-- Spirits cast magic spells, which can be identified in standard ways.
sets.midcast.Pet.WhiteMagic = {legs="Summoner's Spats"}
sets.midcast.Pet['Elemental Magic'] = set_combine(sets.midcast.Pet.BloodPactRage, {legs="Summoner's Spats"})
sets.midcast.Pet['Elemental Magic'].Resistant = {}
--------------------------------------
-- Idle/resting/defense/etc sets
--------------------------------------
-- Resting sets
sets.resting = {main="Boonwell Staff" ,ammo="Seraphicaller",
head="Caller's Horn +2",neck="Eidolon Pendant",ear1="Gifted Earring",ear2="Loquacious Earring",
body="Chelona Blazer",hands="Serpentes Cuffs",
back="Felicitas Cape",waist="Austerity Belt",legs="Nares Trews",feet="Chelona Boots"}
-- Idle sets
sets.idle = {main="Bolelabunga",sub="Genbu's Shield",ammo="Seraphicaller",
head="Caller's Horn +2",neck="Twilight Torque",ear1="Merman's Earring",ear2="Moonshade Earring",
body="Hagondes Coat +1",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Umbra Cape",waist="Fucho-no-obi",legs="Nares Trews",feet="Serpentes Sabots"}
sets.idle.PDT = {main="Bolelabunga",sub="Genbu's Shield",ammo="Seraphicaller",
head="Caller's Horn +2",neck="Twilight Torque",ear1="Merman's Earring",ear2="Moonshade Earring",
body="Hagondes Coat +1",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Umbra Cape",waist="Fucho-no-obi",legs="Nares Trews",feet="Serpentes Sabots"}
-- perp costs:
-- spirits: 7
-- carby: 11 (5 with mitts)
-- fenrir: 13
-- others: 15
-- avatar's favor: -4/tick
-- Max useful -perp gear is 1 less than the perp cost (can't be reduced below 1)
-- Aim for -14 perp, and refresh in other slots.
-- -perp gear:
-- Gridarvor: -5
-- Glyphic Horn +1: -4
-- Caller's Doublet +2/Glyphic Doublet: -4
-- Evoker's Ring: -1
-- Convoker's Pigaches: -4
-- total: -18
-- Can make due without either the head or the body, and use +refresh items in those slots.
sets.idle.Avatar = {main="Gridarvor",sub="Achaq Grip",ammo="Seraphicaller",
head="Caller's Horn +2",neck="Caller's Pendant",ear1="Esper Earring",ear2="Moonshade Earring",
body="Hagondes Coat +1",hands="Nashira Gages",ring1="Evoker's Ring",ring2="Fervor Ring",
back="Samanisi Cape",waist="Fucho-no-Obi",legs="Nares Trews",feet="Caller's Pgch. +2"}
sets.idle.Spirit = {main="Gridarvor",sub="Achaq Grip",ammo="Seraphicaller",
head="Caller's Horn +2",neck="Caller's Pendant",ear1="Esper Earring",ear2="Moonshade Earring",
body="Hagondes Coat +1",hands="Nashira Gages",ring1="Evoker's Ring",ring2="Fervor Ring",
back="Samanisi Cape",waist="Fucho-no-Obi",legs="Nares Trews",feet="Caller's Pgch. +2"}
sets.idle.Town = {main="Bolelabunga",sub="Genbu's Shield",ammo="Seraphicaller",
head="Caller's Horn +2",neck="Twilight Torque",ear1="Merman's Earring",ear2="Moonshade Earring",
body="Hagondes Coat +1",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Umbra Cape",waist="Fucho-no-Obi",legs="Nares Trews",feet="Serpentes Sabots"}
-- Favor uses Caller's Horn instead of Convoker's Horn for refresh
sets.idle.Avatar.Favor = {head="Caller's Horn +2"}
sets.idle.Avatar.Melee = {waist="Kuku Stone", body="Hagondes Coat +1"}
sets.perp = {main="Gridarvor",sub="Achaq Grip",ammo="Seraphicaller",
head="Caller's Horn +2",neck="Caller's Pendant",ear1="Esper Earring",ear2="Moonshade Earring",
body="Hagondes Coat +1",hands="Nashira Gages",ring1="Evoker's Ring",ring2="Fervor Ring",
back="Samanisi Cape",waist="Fucho-no-Obi",legs="Nares Trews",feet="Caller's Pgch. +2"}
-- Caller's Bracer's halve the perp cost after other costs are accounted for.
-- Using -10 (Gridavor, ring, Conv.feet), standard avatars would then cost 5, halved to 2.
-- We can then use Hagondes Coat +1 and end up with the same net MP cost, but significantly better defense.
-- Weather is the same, but we can also use the latent on the pendant to negate the last point lost.
sets.perp.Day = {}
sets.perp.Weather = {neck="Caller's Pendant"}
-- Carby: Mitts+Conv.feet = 1/tick perp. Everything else should be +refresh
sets.perp.Carbuncle = {main="Gridarvor",sub="Vox Grip",
head="Caller's Horn +2",body="Hagondes Coat +1",hands="Carbuncle Mitts",legs="Nares Trews",feet="Caller's Pgch. +2"}
-- Diabolos's Rope doesn't gain us anything at this time
--sets.perp.Diabolos = {waist="Diabolos's Rope"}
sets.perp.Alexander = sets.midcast.Pet.BloodPactWard
sets.perp.staff_and_grip = {main=gear.perp_staff,sub="Vox Grip"}
-- Defense sets
sets.defense.PDT = {main="Bolelabunga",sub="Genbu's Shield",ammo="Seraphicaller",
head="Caller's Horn +2",neck="Twilight Torque",ear1="Merman's Earring",ear2="Moonshade Earring",
body="Hagondes Coat +1",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Umbra Cape",waist="Fucho-no-Obi",legs="Nares Trews",feet="Serpentes Sabots"}
sets.defense.MDT = {main="Bolelabunga",sub="Genbu's Shield",ammo="Seraphicaller",
head="Caller's Horn +2",neck="Twilight Torque",ear1="Merman's Earring",ear2="Moonshade Earring",
body="Hagondes Coat +1",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Umbra Cape",waist="Fucho-no-Obi",legs="Nares Trews",feet="Serpentes Sabots"}
sets.Kiting = {feet="Herald's Gaiters"}
sets.latent_refresh = {waist="Fucho-no-obi"}
--------------------------------------
-- Engaged sets
--------------------------------------
-- Normal melee group
sets.engaged = {}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks that are called to process player actions at specific points in time.
-------------------------------------------------------------------------------------------------------------------
-- 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 state.Buff['Astral Conduit'] and pet_midaction(true) then
eventArgs.handled = true
end
end
function job_midcast(spell, action, spellMap, eventArgs)
if state.Buff['Astral Conduit'] and pet_midaction(true) then
eventArgs.handled = true
end
end
-- 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 state.Buff[spell.english] ~= nil then
state.Buff[spell.english] = true
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 state.Buff[spell.english] ~= nil then
state.Buff[spell.english] = not spell.interrupted or buffactive[spell.english]
end
end
-- Runs when pet completes an action.
function job_pet_aftercast(spell, action, spellMap, eventArgs)
if not spell.interrupted and spell.type == 'BloodPactWard' and spellMap ~= 'DebuffBloodPactWard' then
wards.flag = true
wards.spell = spell.english
send_command('wait 4; gs c reset_ward_flag')
end
end
-------------------------------------------------------------------------------------------------------------------
-- Customization hooks for idle and melee sets, after they've been automatically constructed.
-------------------------------------------------------------------------------------------------------------------
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if pet.isvalid then
if pet.element == world.day_element then
idleSet = set_combine(idleSet, sets.perp.Day)
end
if pet.element == world.weather_element then
idleSet = set_combine(idleSet, sets.perp.Weather)
end
if sets.perp[pet.name] then
idleSet = set_combine(idleSet, sets.perp[pet.name])
end
gear.perp_staff.name = elements.perpetuance_staff_of[pet.element]
if gear.perp_staff.name and (player.inventory[gear.perp_staff.name] or player.wardrobe[gear.perp_staff.name]) then
idleSet = set_combine(idleSet, sets.perp.staff_and_grip)
end
if state.Buff["Avatar's Favor"] and avatars:contains(pet.name) then
idleSet = set_combine(idleSet, sets.idle.Avatar.Favor)
end
if pet.status == 'Engaged' then
idleSet = set_combine(idleSet, sets.idle.Avatar.Melee)
end
end
if player.mpp < 51 then
idleSet = set_combine(idleSet, sets.latent_refresh)
end
return idleSet
end
-------------------------------------------------------------------------------------------------------------------
-- General hooks for other events.
-------------------------------------------------------------------------------------------------------------------
-- 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 state.Buff[buff] ~= nil then
state.Buff[buff] = gain
handle_equipping_gear(player.status)
elseif storms:contains(buff) then
handle_equipping_gear(player.status)
end
end
-- Called when the player's pet's status changes.
-- This is also called after pet_change after a pet is released. Check for pet validity.
function job_pet_status_change(newStatus, oldStatus, eventArgs)
if pet.isvalid and not midaction() and not pet_midaction() and (newStatus == 'Engaged' or oldStatus == 'Engaged') then
handle_equipping_gear(player.status, newStatus)
end
end
-- Called when a player gains or loses a pet.
-- pet == pet structure
-- gain == true if the pet was gained, false if it was lost.
function job_pet_change(petparam, gain)
classes.CustomIdleGroups:clear()
if gain then
if avatars:contains(pet.name) then
classes.CustomIdleGroups:append('Avatar')
elseif spirits:contains(pet.name) then
classes.CustomIdleGroups:append('Spirit')
end
else
select_default_macro_book('reset')
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements self-commands.
-------------------------------------------------------------------------------------------------------------------
-- Called for custom player commands.
function job_self_command(cmdParams, eventArgs)
if cmdParams[1]:lower() == 'petweather' then
handle_petweather()
eventArgs.handled = true
elseif cmdParams[1]:lower() == 'siphon' then
handle_siphoning()
eventArgs.handled = true
elseif cmdParams[1]:lower() == 'pact' then
handle_pacts(cmdParams)
eventArgs.handled = true
elseif cmdParams[1] == 'reset_ward_flag' then
wards.flag = false
wards.spell = ''
eventArgs.handled = true
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)
classes.CustomIdleGroups:clear()
if pet.isvalid then
if avatars:contains(pet.name) then
classes.CustomIdleGroups:append('Avatar')
elseif spirits:contains(pet.name) then
classes.CustomIdleGroups:append('Spirit')
end
end
end
-- Set eventArgs.handled to true if we don't want the automatic display to be run.
function display_current_job_state(eventArgs)
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
-- Custom spell mapping.
function job_get_spell_map(spell)
if spell.type == 'BloodPactRage' then
if magicalRagePacts:contains(spell.english) then
return 'MagicalBloodPactRage'
else
return 'PhysicalBloodPactRage'
end
elseif spell.type == 'BloodPactWard' and spell.target.type == 'MONSTER' then
return 'DebuffBloodPactWard'
end
end
-- Cast the appopriate storm for the currently summoned avatar, if possible.
function handle_petweather()
if player.sub_job ~= 'SCH' then
add_to_chat(122, "You can not cast storm spells")
return
end
if not pet.isvalid then
add_to_chat(122, "You do not have an active avatar.")
return
end
local element = pet.element
if element == 'Thunder' then
element = 'Lightning'
end
if S{'Light','Dark','Lightning'}:contains(element) then
add_to_chat(122, 'You do not have access to '..elements.storm_of[element]..'.')
return
end
local storm = elements.storm_of[element]
if storm then
send_command('@input /ma "'..elements.storm_of[element]..'" <me>')
else
add_to_chat(123, 'Error: Unknown element ('..tostring(element)..')')
end
end
-- Custom uber-handling of Elemental Siphon
function handle_siphoning()
if areas.Cities:contains(world.area) then
add_to_chat(122, 'Cannot use Elemental Siphon in a city area.')
return
end
local siphonElement
local stormElementToUse
local releasedAvatar
local dontRelease
-- If we already have a spirit out, just use that.
if pet.isvalid and spirits:contains(pet.name) then
siphonElement = pet.element
dontRelease = true
-- If current weather doesn't match the spirit, but the spirit matches the day, try to cast the storm.
if player.sub_job == 'SCH' and pet.element == world.day_element and pet.element ~= world.weather_element then
if not S{'Light','Dark','Lightning'}:contains(pet.element) then
stormElementToUse = pet.element
end
end
-- If we're subbing /sch, there are some conditions where we want to make sure specific weather is up.
-- If current (single) weather is opposed by the current day, we want to change the weather to match
-- the current day, if possible.
elseif player.sub_job == 'SCH' and world.weather_element ~= 'None' then
local intense = get_weather_intensity()
-- We can override single-intensity weather; leave double weather alone, since even if
-- it's partially countered by the day, it's not worth changing.
if intense == 1 then
-- If current weather is weak to the current day, it cancels the benefits for
-- siphon. Change it to the day's weather if possible (+0 to +20%), or any non-weak
-- weather if not.
-- If the current weather matches the current avatar's element (being used to reduce
-- perpetuation), don't change it; just accept the penalty on Siphon.
if world.weather_element == elements.weak_to[world.day_element] and
(not pet.isvalid or world.weather_element ~= pet.element) then
-- We can't cast lightning/dark/light weather, so use a neutral element
if S{'Light','Dark','Lightning'}:contains(world.day_element) then
stormElementToUse = 'Wind'
else
stormElementToUse = world.day_element
end
end
end
end
-- If we decided to use a storm, set that as the spirit element to cast.
if stormElementToUse then
siphonElement = stormElementToUse
elseif world.weather_element ~= 'None' and world.weather_element ~= elements.weak_to[world.day_element] then
siphonElement = world.weather_element
else
siphonElement = world.day_element
end
local command = ''
local releaseWait = 0
if pet.isvalid and avatars:contains(pet.name) then
command = command..'input /pet "Release" <me>;wait 1.1;'
releasedAvatar = pet.name
releaseWait = 10
end
if stormElementToUse then
command = command..'input /ma "'..elements.storm_of[stormElementToUse]..'" <me>;wait 4;'
releaseWait = releaseWait - 4
end
if not (pet.isvalid and spirits:contains(pet.name)) then
command = command..'input /ma "'..elements.spirit_of[siphonElement]..'" <me>;wait 4;'
releaseWait = releaseWait - 4
end
command = command..'input /ja "Elemental Siphon" <me>;'
releaseWait = releaseWait - 1
releaseWait = releaseWait + 0.1
if not dontRelease then
if releaseWait > 0 then
command = command..'wait '..tostring(releaseWait)..';'
else
command = command..'wait 1.1;'
end
command = command..'input /pet "Release" <me>;'
end
if releasedAvatar then
command = command..'wait 1.1;input /ma "'..releasedAvatar..'" <me>'
end
send_command(command)
end
-- Handles executing blood pacts in a generic, avatar-agnostic way.
-- cmdParams is the split of the self-command.
-- gs c [pact] [pacttype]
function handle_pacts(cmdParams)
if areas.Cities:contains(world.area) then
add_to_chat(122, 'You cannot use pacts in town.')
return
end
if not pet.isvalid then
add_to_chat(122,'No avatar currently available. Returning to default macro set.')
select_default_macro_book('reset')
return
end
if spirits:contains(pet.name) then
add_to_chat(122,'Cannot use pacts with spirits.')
return
end
if not cmdParams[2] then
add_to_chat(123,'No pact type given.')
return
end
local pact = cmdParams[2]:lower()
if not pacts[pact] then
add_to_chat(123,'Unknown pact type: '..tostring(pact))
return
end
if pacts[pact][pet.name] then
if pact == 'astralflow' and not buffactive['astral flow'] then
add_to_chat(122,'Cannot use Astral Flow pacts without 2hr active.')
return
end
-- Leave out target; let Shortcuts auto-determine it.
send_command('@input /pet "'..pacts[pact][pet.name]..'"')
else
add_to_chat(122,pet.name..' does not have a pact of type ['..pact..'].')
end
end
-- Event handler for updates to player skill, since we can't rely on skill being
-- correct at pet_aftercast for the creation of custom timers.
windower.raw_register_event('incoming chunk',
function (id)
if id == 0x62 then
if wards.flag then
create_pact_timer(wards.spell)
wards.flag = false
wards.spell = ''
end
end
end)
-- Function to create custom timers using the Timers addon. Calculates ward duration
-- based on player skill and base pact duration (defined in job_setup).
function create_pact_timer(spell_name)
-- Create custom timers for ward pacts.
if wards.durations[spell_name] then
local ward_duration = wards.durations[spell_name]
if ward_duration < 181 then
local skill = player.skills.summoning_magic
if skill > 300 then
skill = skill - 300
if skill > 200 then skill = 200 end
ward_duration = ward_duration + skill
end
end
local timer_cmd = 'timers c "'..spell_name..'" '..tostring(ward_duration)..' down'
if wards.icons[spell_name] then
timer_cmd = timer_cmd..' '..wards.icons[spell_name]
end
send_command(timer_cmd)
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book(reset)
if reset == 'reset' then
-- lost pet, or tried to use pact when pet is gone
end
-- Default macro set/book
set_macro_page(1, 16)
end
This is currently the one I use. I don't know where to put in your snippet about conduit. :(
By Acacia 2014-10-11 20:22:01
Give me a few to look it over and I'll send you a PM.
By Cleric 2014-10-12 17:05:16
Conveyance Cape Augments:
I have currently, BP damage +1, Skill +5, and Pet:enmity+11.. Would that be better than anything we currently have access to for different BPs? Keep in mind, I'm using Samianisi Cape for Physical BP, and Tiresias' for Magical.
By Acacia 2014-10-12 17:38:39
Conveyance Cape Augments:
I have currently, BP damage +1, Skill +5, and Pet:enmity+11.. Would that be better than anything we currently have access to for different BPs? Keep in mind, I'm using Samianisi Cape for Physical BP, and Tiresias' for Magical. The augments you got will beat Samanisi and Tiresias. Any amount of BP damage on Conveyance makes it the best cape for physical BPs. For magical damage BPs, Argochampsa Mantle is the best.
By Cleric 2014-10-12 18:14:12
Hmm- I need to figure out where to get that Argochampsa Mantle then! :) Thank you so much. Some guy on our run today said he got a BP Delay II -3 on his cape... /drool
By TinyAttorney 2014-10-13 10:23:14
Carbuncle.Papesse said: »This is my main avatar TP set :
ItemSet 329393
I can cap perp cost with Nirvana, Hagondes Coat +1 (augmented with perp cost-5) and Evoker's Ring. Hagondes Pants +1 have Pet: ATK +23.
With this set my avatars are at 979 ACC, 986 ATK, 14% Haste.
Any reason not to use Hurch'lan Sash in this set?
By Crevox 2014-10-13 10:31:04
Carbuncle.Papesse said: »This is my main avatar TP set :
ItemSet 329393
I can cap perp cost with Nirvana, Hagondes Coat +1 (augmented with perp cost-5) and Evoker's Ring. Hagondes Pants +1 have Pet: ATK +23.
With this set my avatars are at 979 ACC, 986 ATK, 14% Haste.
Any reason not to use Hurch'lan Sash in this set?
Summoner can't use that.
[+]
By TinyAttorney 2014-10-13 10:57:14
Carbuncle.Papesse said: »This is my main avatar TP set :
ItemSet 329393
I can cap perp cost with Nirvana, Hagondes Coat +1 (augmented with perp cost-5) and Evoker's Ring. Hagondes Pants +1 have Pet: ATK +23.
With this set my avatars are at 979 ACC, 986 ATK, 14% Haste.
Any reason not to use Hurch'lan Sash in this set?
Summoner can't use that.
Meh, it's not the best reason I've seen, but....
We should start a separate thread dedicated to items SMN can't equip.
By Acacia 2014-10-13 17:53:12
Made a cure set with max potency that doesn't require the use of main weapon slot. Nice if you have Nirvana so your avatar's level doesn't change when you cure :)
ItemSet 329587
[+]
By Crevox 2014-10-14 06:30:04
Can Flaming Crush magic burst?
Serveur: Excalibur
Game: FFXIV
Posts: 751
By Creaucent Alazrin 2014-10-14 06:32:07
No its not a pure magical BP.
By Crevox 2014-10-14 06:34:45
Creaucent Alazrin said: »No its not a pure magical BP.
Just trying to compare it to something like Lunge which can, but I guess Lunge is pure magic. I figured the hybrid portion of the first hit might be able to burst.
By FaeQueenCory 2014-10-14 06:51:53
Flaming Crush is considered as a WS for SC purposes... Idr its properties, but that's what we have wikis for. (Though I think it's just T1-fire.)
Only the pure magic BPs can MB, phys and hybrid BPs SC.
By Crevox 2014-10-14 07:12:24
Flaming Crush is considered as a WS for SC purposes... Idr its properties, but that's what we have wikis for. (Though I think it's just T1-fire.)
Only the pure magic BPs can MB, phys and hybrid BPs SC.
As far as I know, none of the 70 BPs can skillchain at all.
[+]
By FaeQueenCory 2014-10-14 07:16:34
They should. I know Predator Claws has SC properties (remember that big SC image?)... So Flaming Crush should too.
Not that BPs are really good for SCs.... But... It's something, y'know?
By Crevox 2014-10-14 07:20:55
They should. I know Predator Claws has SC properties (remember that big SC image?)... So Flaming Crush should too.
Not that BPs are really good for SCs.... But... It's something, y'know?
As far as I can tell, based on what everyone is saying, and based on my own personal experiences, you can't skillchain with the 70 BPs. When I leveled summoner solo with trusts, I skillchained with my avatar/magic bursted with it but 70 BPs would not work for skillchaining.
If you have actual evidence otherwise, that would be nice too, but also want to stay on topic.
Bahamut.Shirai
Serveur: Bahamut
Game: FFXI
By Bahamut.Shirai 2014-10-14 07:55:40
Level 70 Blood Pacts don't have and never had any skillchain properties, if SE had ninja'd it it in somewhere down the line the summoner forums would have exploded about it the day it happened.
And as far as that goes, this would be too large a change for SE to ninja it, the devs would have mentioned it somewhere.
As for the topic at hand; MBing Flaming crush... no clue! Even if it can, you'll never see it as a message in your chatlog.
It would need testing, very, very extensive testing and I don't think anyone has.
[+]
By Crevox 2014-10-14 08:12:40
Quote: Even if it can, you'll never see it as a message in your chatlog.
Yeah, that's the hard part. :(
By Acacia 2014-10-14 08:59:25
Only BPs that consume the avatar's TP can be used to magic burst. Trying to magic burst with Flaming Crush would be like trying to magic burst with Sanguine Blade.
By Crevox 2014-10-14 09:39:01
Only BPs that consume the avatar's TP can be used to magic burst. Trying to magic burst with Flaming Crush would be like trying to magic burst with Sanguine Blade.
Or trying to burst with Lunge?
By Acacia 2014-10-14 10:17:22
Only BPs that consume the avatar's TP can be used to magic burst. Trying to magic burst with Flaming Crush would be like trying to magic burst with Sanguine Blade.
Or trying to burst with Lunge? No, because Lunge isn't a weapon skill.
By Acacia 2014-10-14 14:35:34
I just realized that if you have Apogee active, using a BP on a monster will not cause it to aggro. I'm guessing this is a bug.
Serveur: Siren
Game: FFXI
Posts: 228
By Siren.Noxzema 2014-10-14 14:47:32
For the people that don't check the official forums.
Quote: Nice changes are on the horizon for Avatar’s Favor!
The development team is currently looking into making it so instead of reducing the effect of Avatar’s Favor when executing a Blood Pact, it will actually become stronger, and this effect will increase proportionately with Blood Pacts that consume a higher amount of MP. http://forum.square-enix.com/ffxi/threads/44622-Avatar-s-Favor-still-lackluster?p=528383#post528383
By Pantafernando 2014-10-14 14:54:35
I was wtf? They did with avatar favor? My smn was drinking mp...
I hated this change, and want my perp cost down back...
Serveur: Siren
Game: FFXI
Posts: 228
By Siren.Noxzema 2014-10-14 15:02:35
It shouldn't be hard to beat the new cost with favor, seems you only need -16 perp cost to beat it (at least that's what I have, and I get 7 mp refresh with and w/o favor).
Serveur: Siren
Game: FFXI
Posts: 228
By Siren.Noxzema 2014-10-14 15:55:36
Anyone know which Favor tier list is more accurate/up to date?
|
|