|
(Don't) Fear the Reaper: A Dark Knight Guide
By SimonSes 2019-12-20 15:19:44
I'm able to reach 602 Scythe skill with Ratri +1 head/body/feet; Does this have any benefit, given the recent changes to Scythe damage calculations?
Just the regular benefits of combat skill. Its not hand to hand.
Asura.Botosi
Serveur: Asura
Game: FFXI
Posts: 375
By Asura.Botosi 2019-12-20 16:26:47
Do Heathen Pants need to be worn during JA Activation or during Drain in order to take effect? You'd think I'd know this being a r15 Calad Drk, but..... no.
Asura.Nuance
Serveur: Asura
Game: FFXI
Posts: 397
By Asura.Nuance 2019-12-20 16:28:48
Activation of the JA only.
Only the relic head has to be actually worn to get the effects of the augment for seal
Asura.Botosi
Serveur: Asura
Game: FFXI
Posts: 375
By Asura.Botosi 2019-12-20 16:30:21
Activation of the JA only.
Only the relic head has to be actually worn to get the effects of the augment for seal
Awesome, thanks!
Serveur: Asura
Game: FFXI
Posts: 12
By Asura.Madpyro 2019-12-20 19:17:01
can some one post a updated lua link please
By Galkapryme 2019-12-26 22:20:16
can some one post a updated lua link please
Here's mine. I didn't create it, but I suppose I reconfigured it a bit, and it includes relatively updated gear. I forget who the original author was. NOTE: There are still some things I have yet to acquire, and some aspects of the lua that I haven't touched because I don't use them.
Code
--[[
=== Features ===
If you want auto Reive detection for Ygnas Resolve+1, and Gavialis Helm for some of your WS, then you will need my User-Globals.lua
Otherwise, you might be able to get away without it. (not tested)
If you don't use organizer, then remove the include('organizer-lib') in get_sets() and remove sets.Organizer
This lua has a few MODES you can toggle with hotkeys or macros, and there's a few situational RULES that activate without hotkeys
::MODES::
SouleaterMode
Status: OFF by default.
Hotkey: Toggle this with @F9 (window key + F9).
Macro: /console gs c togggle SouleaterMode
Notes: This mode makes it possible to use Souleater in situations where you would normally avoid using it. When SouleaterMode
is ON, Souleater will be canceled automatically after the first Weaponskill used. CAVEAT -. If Bloodweapon
is active, or if Drain's HP Boost buff is active, then Souleater will remain active until the next WS used after
either buff wears off.
CapacityMode
Status: OFF by default.
Hotkey: with ALT + =
Macro: /console cs c toggle CapacityMode
Notes: It will full-time whichever piece of gear you specify in sets.CapacityMantle
Extra Info: You can change the default (true|false) status of any MODE by changing their values in job_setup()
::RULES::
Gavialis helm
Status: enabled
Setting: set use_gavialis = true below in job_setup.
Notes: Gavialis Helm will automatically be used for all weaponskills on their respective days of the week. If you would like to
exclude a weapon skill, you must add it to wsList below. (found in job_setup) You also need my User-Globals.lua for this
to even work.
Ygna's Resolve +1
Status: enabled in Reive
Setting: n/a
Notes: Will automatically be used when you're in a reive. If you have my User-Globals.lua this will work
with all your jobs that use mote's includes. Not just this one!
Moonshade earring
Status: Not used for WS's at 3000 TP.
Setting: n/a
You can hit F12 to display custom MODE status as well as the default stuff.
Single handed weapons are handled in the sets.engaged.SW set. (sword + shield, etc.)
::NOTES::
My sets have a specific order, or they will not function correctly.
sets.engaged.[CombatForm][CombatWeapon][Offense or HybridMode][CustomMeleeGroups or CustomClass]
CombatForm = Haste, DW, SW
CombatWeapon = GreatSword, Scythe, Apocalypse, Ragnarok, Caladbolg, Liberator, Anguta
OffenseMode = Mid, Acc
HybridMode = PDT
CustomMeleeGroups = AM3, AM, Haste
CustomClass = OhShit
CombatForm Haste is used when Last Resort + Hasso AND either Haste, March, Indi-Haste Geo-Haste is on you.
CombatForm DW will activate with /dnc or /nin AND a weapon listed in drk_sub_weapons equipped offhand.
SW is active with an empty sub-slot, or a shield listed in the shields = S{} list.
CombatWeapon GreatSword will activate when you equip a GS listed in gsList in job_setup().
CombatWeapon Scythe will activate when you equip a Scythe listed in scytheList in job_setup().
Weapons that do not fall into these groups, or have sets by weapon name, will use default sets.engaged
most gear sets derrive themselves from sets.engaged, so try to keep it updated. It's much smarter to derrive sets than to
completely re-invent each gear set for every weapon. Let your gear inherit. Less code written means less errors.
CustomMeleeGroups AM3 will activate when Aftermath lvl 3 is up, and CustomMeleeGroups AM will activate when relic Aftermath is up.
There are no empy AM sets for now.
--]]
--
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
include('organizer-lib')
end
-- Setup vars that are user-independent.
function job_setup()
state.CapacityMode = M(false, 'Capacity Point Mantle')
include('Mote-TreasureHunter')
state.TreasureMode:set('Tag')
state.Buff.Souleater = buffactive.souleater or false
state.Buff['Last Resort'] = buffactive['Last Resort'] or false
-- Set the default to false if you'd rather SE always stay acitve
state.SouleaterMode = M(false, 'Soul Eater Mode')
-- state.LastResortMode = M(false, 'Last Resort Mode')
-- Use Gavialis helm?
use_gavialis = true
-- Weaponskills you do NOT want Gavialis helm used with (only considered if use_gavialis = true)
wsList = S{'Spiral Hell', 'Catastrophe', 'Torcleaver', 'Insurgency', 'Quietus', 'Cross Reaper'}
-- Greatswords you use.
gsList = S{'Malfeasance', 'Macbain', 'Nanadaka', 'Mekosuchus Blade', 'Ragnarok', 'Raetic Algol', 'Raetic Algol +1', 'Caladbolg', 'Montante +1', 'Albion' }
scytheList = S{'Liberator', 'Apocalypse', 'Anguta', 'Raetic Scythe', 'Deathbane', 'Twilight Scythe' }
remaWeapons = S{'Apocalypse', 'Anguta', 'Liberator', 'Caladbolg', 'Ragnarok'}
shields = S{'Rinda Shield'}
-- Mote has capitalization errors in the default Absorb mappings, so we use our own
absorbs = S{'Absorb-STR', 'Absorb-DEX', 'Absorb-VIT', 'Absorb-AGI', 'Absorb-INT', 'Absorb-MND', 'Absorb-CHR', 'Absorb-Attri', 'Absorb-ACC', 'Absorb-TP'}
-- Offhand weapons used to activate DW mode
swordList = S{"Sangarius", "Sangarius +1", "Usonmunku", "Perun +1", "Tanmogayi", "Naegling"}
get_combat_form()
get_combat_weapon()
update_melee_groups()
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','STP','DA')
state.WeaponskillMode:options('Normal', 'Mid', 'Acc')
state.CastingMode:options('Normal', 'Acc')
state.IdleMode:options('Town', 'Normal', 'Regen', 'Refresh', 'Weak')
state.RestingMode:options('Normal')
state.PhysicalDefenseMode:options('PDT', 'Reraise')
state.MagicalDefenseMode:options('MDT')
state.HybridMode:options('Normal', 'PDT')
war_sj = player.sub_job == 'WAR' or false
-- Additional local binds
send_command('bind ^= gs c cycle treasuremode')
send_command('bind != gs c toggle CapacityMode')
send_command('bind @f9 gs c toggle SouleaterMode')
send_command('bind !- gs equip sets.crafting')
send_command('bind f1 gs c cycle OffenseMode')
send_command('bind f10 gs c cycle PhysicalDefenseMode')
send_command('bind f11 gs c cycle MagicalDefenseMode')
send_command('bind f2 gs c cycle IdleMode')
--send_command('bind ^` gs c toggle LastResortMode')
select_default_macro_book()
end
-- Called when this job file is unloaded (eg: job change)
function file_unload()
send_command('unbind ^`')
send_command('unbind !=')
send_command('unbind ^[')
send_command('unbind ![')
send_command('unbind @f9')
send_command('unbind f1')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Start defining the sets
--------------------------------------
-- Augmented gear
Niht = {name="Niht Mantle", augments={'Attack+10','Dark magic skill +8','"Drain" and "Aspir" potency +25'}}
Ankou = {}
Ankou.FC = { name="Ankou's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+9','"Fast Cast"+10','Spell interruption rate down-4%',}}
Ankou.STP = { name="Ankou's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+5','"Store TP"+10','Damage taken-5%',}}
Ankou.DA = { name="Ankou's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+2','"Dbl.Atk."+10',}}
Ankou.WSD = { name="Ankou's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%','Damage taken-5%',}}
Ankou.VIT = { name="Ankou's Mantle", augments={'VIT+1', 'Haste +10%',}}
Ankou.INT = { name="Ankou's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Fast Cast"+10','Spell interruption rate down-10%',}}
Odyssean = {}
Odyssean.Head = { name="Odyssean Helm", augments={'"Mag.Atk.Bns."+12','Pet: Crit.hit rate +4','Chance of successful block +4','Mag. Acc.+19 "Mag.Atk.Bns."+19',}}
Odyssean.Body = { name="Odyss. Chestplate", augments={'"Mag.Atk.Bns."+24','"Fast Cast"+4','STR+1','Accuracy+13',}}
Odyssean.Hands = { name="Odyssean Gauntlets", augments={'"Dbl.Atk."+2','INT+13','Accuracy+12 Attack+12','Mag. Acc.+17 "Mag.Atk.Bns."+17',}}
Odyssean.Legs = { name="Odyssean Cuisses", augments={'INT+2','Potency of "Cure" effect received+4%','Accuracy+17 Attack+17','Mag. Acc.+17 "Mag.Atk.Bns."+17',}}
Odyssean.Feet = { name="Odyssean Greaves", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','AGI+7','"Mag.Atk.Bns."+3',}}
sets.TreasureHunter = {waist="Chaac Belt" }
sets.Organizer = {}
sets.precast.JA['Diabolic Eye'] = {hands="Fallen's Finger Gauntlets +3"}
sets.precast.JA['Nether Void'] = {legs="Heathen's Flanchard +1"}
sets.precast.JA['Dark Seal'] = {head="Fallen's burgeonet +3"}
sets.precast.JA['Souleater'] = {head="Ignominy burgeonet +3"}
sets.precast.JA['Weapon Bash'] = {hands="Ignominy Gauntlets +2",left_ring="Slayer's Ring"} --Skillchain Property
sets.precast.JA['Blood Weapon'] = {body="Fallen's Cuirass +3"}
sets.precast.JA['Last Resort'] = {feet="Fallen's Sollerets +3"}
sets.WSDayBonus = { head="Gavialis Helm" }
sets.WSBack = Ankou.WSD
-- Earring considerations, given Lugra's day/night stats
sets.BrutalLugra = { ear1="Brutal Earring", ear2="Lugra Earring" }
sets.IshvaraLugra = { ear1="Ishvara Earring", ear2="Lugra Earring" }
sets.Lugra = { ear1="Lugra Earring" }
sets.Brutal = { ear1="Brutal Earring" }
sets.Ishvara = { ear1="Ishvara Earring" }
-- Waltz set (chr and vit)
-- sets.precast.Waltz = {}
-- Fast cast sets for spells
sets.precast.FC = {
ammo="Impatiens",
head={ name="Carmine Mask", augments={'Accuracy+10','DEX+10','MND+15',}},
body={ name="Fall. Cuirass +3", augments={'Enhances "Blood Weapon" effect',}},
hands={ name="Leyline Gloves", augments={'Accuracy+15','Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+3',}},
legs="Arjuna Breeches",
feet={ name="Carmine Greaves +1", augments={'MP+80','INT+12','MND+12',}},
neck="Erra Pendant",
waist="Austerity Belt +1",
back=Ankou.INT,
}
sets.precast.FC['Elemental Magic'] = sets.precast.FC
sets.precast.FC['Enfeebling Magic'] = sets.precast.FC
sets.precast.FC['Dark Magic'] = set_combine(sets.precast.FC, {head={ name="Fall. Burgeonet +3", augments={'Enhances "Dark Seal" effect',}}})
-- Midcast Sets
sets.midcast.FastRecast = sets.precast.FC
-- sets.midcast.Trust = {
-- head={ name="Carmine Mask", augments={'Accuracy+10','DEX+10','MND+15',}},
-- hands="Leyline Gloves",
-- body="Fallen's Cuirass +3",
-- legs="Arjuna Breeches",
-- feet="Carmine Greaves +1"
-- }
sets.midcast["Apururu (UC)"] = set_combine(sets.midcast.Trust, {
body="Apururu Unity shirt",
})
-- Specific spells
sets.midcast.Utsusemi = sets.precast.FC
sets.midcast['Dark Magic'] = {
ammo="Strobilus",
head="Pixi Hairpin +1",
body={ name="Fall. Cuirass +3", augments={'Enhances "Blood Weapon" effect',}},
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}},
legs={ name="Fall. Flanchard +3", augments={'Enhances "Muted Soul" effect',}},
feet="Ratri Sollerets +1",
neck="Erra Pendant",
waist="Austerity Belt +1",
left_ear="Friomisi Earring",
right_ear="Crematio Earring",
left_ring="Archon Ring",
right_ring="Evanescence Ring",
back=Ankou.INT,
}
sets.midcast.Endark = sets.midcast['Dark Magic']
sets.midcast['Dark Magic'].Acc = set_combine(sets.midcast['Dark Magic'], {
head="Ratri Sallet +1", -- 45 macc
hands="Ratri gadlings +1" -- 44 macc
})
sets.midcast['Enfeebling Magic'] = {
ammo="Strobilus",
head={ name="Fall. Burgeonet +3", augments={'Enhances "Dark Seal" effect',}},
neck="Erra Pendant", -- Dark Magic Skill 10 + 17 macc
body="Ignominy Cuirass +3",
hands="Ratri gadlings +1", -- 44 macc
ring1="Stikini Ring +1", -- 11 macc
ring2="Kishar Ring",
waist="Austerity Belt +1",
legs="Fallen's Flanchard +3", -- Dark Magic Skill 18 + 39macc
back=Ankou.INT,
feet="Flamma Gambieras +2"
}
sets.midcast['Elemental Magic'] = {
ammo="Strobilus",
head={ name="Odyssean Helm", augments={'"Mag.Atk.Bns."+12','Pet: Crit.hit rate +4','Chance of successful block +4','Mag. Acc.+19 "Mag.Atk.Bns."+19',}},
neck="Eddy Necklace", -- macc 5, 11 matk
ear1="Friomisi Earring", -- 10 matk
right_ear="Crematio Earring", -- matk 6, mdmg +6
body={ name="Fall. Cuirass +3", augments={'Enhances "Blood Weapon" effect',}}, -- macc 40, matk 60
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}}, -- macc 38, matk 62
ring1="Fenrir Ring +1", -- macc/matk 3, mdmg 5
ring2="Fenrir Ring +1", -- macc/matk 3, mdmg 5
waist="Austerity Belt +1", -- macc/matk 7
legs={ name="Odyssean Cuisses", augments={'INT+2','Potency of "Cure" effect received+4%','Accuracy+17 Attack+17','Mag. Acc.+17 "Mag.Atk.Bns."+17',}},
back=Ankou.INT, -- macc 29, mdmg 20
feet="Heathen's Sollerets +1" -- macc/matk 20, Occult Acumen 30
}
-- Mix of HP boost, -Spell interruption%, and Dark Skill
sets.midcast['Dread Spikes'] = set_combine(sets.midcast['Dark Magic'], {
ammo="Strobilus",
head="Ignominy Burgonet +3", -- 17
left_ear="Friomisi Earring",
right_ear="Crematio Earring",
body="Heathen's Cuirass +1",
hands="Fallen's Finger Gauntlets +3",
back=Ankou.INT,
})
sets.midcast['Dread Spikes'].Acc = set_combine(sets.midcast['Dark Magic'], {
body="Heathen's Cuirass +1",
hands="Fallen's Finger Gauntlets +3"
})
-- Drain spells
sets.midcast.Drain = sets.midcast['Dark Magic']
sets.midcast.Aspir = sets.midcast.Drain
sets.midcast.Drain.Acc = set_combine(sets.midcast.Drain, {
hands="Leyline Gloves",
waist="Eschan Stone", -- macc/matk 7
})
sets.midcast.Aspir.Acc = sets.midcast.Drain.Acc
sets.midcast.Drain.OhShit = set_combine(sets.midcast.Drain, {
legs="Carmine Cuisses",
feet="Ratri Sollerets +1"
})
-- Absorbs
sets.midcast.Absorb = set_combine(sets.midcast['Dark Magic'], {
head="Ignominy Burgonet +3", -- Absorb duration 20
feet="Ratri Sollerets +1",
ring2="Kishar Ring",
back=Ankou.INT,
})
sets.midcast['Absorb-TP'] = set_combine(sets.midcast.Absorb, {
hands="Heathen's Gauntlets +1",
ring2="Kishar Ring",
})
sets.midcast['Absorb-TP'].Acc = set_combine(sets.midcast.Absorb.Acc, {
hands="Heathen's Gauntlets +1",
ring2="Kishar Ring",
})
sets.midcast.Absorb.Acc = set_combine(sets.midcast['Dark Magic'].Acc, {
head="Flamma Zucchetto +2", -- 44 macc
back=Ankou.INT,
hands="Ratri gadlings +1",
ring2="Kishar Ring",
})
-- Ranged for xbow
sets.precast.RA = {}
sets.midcast.RA = {}
-- WEAPONSKILL SETS
-- General sets
-- Balanced (Acc and WSD) WSD +74
sets.precast.WS = {
ammo="Knobkierrie", --WSD +6
head={ name="Fall. Burgeonet +3", augments={'Enhances "Dark Seal" effect',}},
body="Ignominy Cuirass +3", --WSD +10
hands="Ratri Gadlings +1", --WSD +8
legs={ name="Fall. Flanchard +3", augments={'Enhances "Muted Soul" effect',}}, --WSD +10
feet="Ratri Sollerets +1", --WSD +8
neck="Fotia Gorget", --WSA/WSD +10
waist="Fotia Belt", --WSA/WSD +10
left_ear="Telos Earring",
right_ear="Ishvara Earring", --WSD +2
left_ring="Chirich Ring",
right_ring="Ifrit Ring +1",
back=Ankou.WSD, -- WSD +10
}
-- CATASTROPHE
-- 40% STR/40% INT
-- +68% Catastrophe Damage
sets.precast.WS['Catasrophe'] = {
main="Apocalypse",
sub="Utu Grip",
ammo="Knobkierrie",
head="Ratri Sallet +1",
body="Ignominy Cuirass +3",
hands="Rat. Gadlings +1",
legs={ name="Fall. Flanchard +3", augments={'Enhances "Muted Soul" effect',}},
feet="Rat. Sollerets +1",
neck="Abyssal Beads +2",
waist="Fotia Belt",
left_ear="Ishvara Earring",
right_ear="Lugra Earring +1",
left_ring="Niqmaddu Ring",
right_ring="Ifrit Ring +1",
back=Ankou.WSD,
}
-- RESOLUTION
-- 86-100% STR
sets.precast.WS.Resolution = sets.precast.WS
sets.precast.WS.Resolution.Acc = sets.precast.WS
-- TORCLEAVER
-- VIT 80%
sets.precast.WS.Torcleaver = sets.precast.WS
sets.precast.WS.Torcleaver.Mid = set_combine(sets.precast.WS.Mid, {
neck="Abyssal Bead Necklace +2",
})
sets.precast.WS.Torcleaver.Acc = sets.precast.WS.Torcleaver.Mid
-- INSURGENCY
-- 20% STR / 20% INT
-- Base set only used at 3000TP to put AM3 up
sets.precast.WS.Insurgency = set_combine(sets.precast.WS, {head="Ratri Sallet +1"})
-- CROSS REAPER
-- 60% STR / 60% MND
sets.precast.WS['Cross Reaper'] = sets.precast.WS
-- ENTROPY
-- 86-100% INT
sets.precast.WS['Entropy'] = {
ammo="Knobkierrie",
head={ name="Odyssean Helm", augments={'"Mag.Atk.Bns."+12','Pet: Crit.hit rate +4','Chance of successful block +4','Mag. Acc.+19 "Mag.Atk.Bns."+19',}},
body={ name="Fall. Cuirass +3", augments={'Enhances "Blood Weapon" effect',}},
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}},
legs={ name="Fall. Flanchard +3", augments={'Enhances "Muted Soul" effect',}},
feet="Ratri Sollerets +1",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Friomisi Earring",
right_ear="Ishvara Earring",
left_ring="Fenrir Ring +1",
right_ring="Stikini Ring +1",
back=Ankou.WSD,
}
-- Quietus
-- 60% STR / MND
sets.precast.WS['Quietus'] = sets.precast.WS['Catastrophe']
-- SPIRAL HELL
-- 50% STR / 50% INT
sets.precast.WS['Spiral Hell'] = sets.precast.WS['Catastrophe']
-- SHADOW OF DEATH
-- 40% STR 40% INT - Darkness Elemental
sets.precast.WS['Shadow of Death'] = set_combine(sets.precast.WS['Entropy'], {
head="Pixie Hairpin +1",
neck="Eddy Necklace",
})
sets.precast.WS['Shadow of Death'].Mid = set_combine(sets.precast.WS['Shadow of Death'], sets.precast.WS.Mid, {
})
sets.precast.WS['Shadow of Death'].Acc = set_combine(sets.precast.WS['Shadow of Death'], sets.precast.WS.Acc, {
})
-- DARK HARVEST
-- 40% STR 40% INT - Darkness Elemental
sets.precast.WS['Dark Harvest'] = sets.precast.WS['Shadow of Death']
sets.precast.WS['Dark Harvest'].Mid = set_combine(sets.precast.WS['Shadow of Death'], {head="Ignominy Burgeonet +3", feet="Heathen's Sollerets +1"})
sets.precast.WS['Dark Harvest'].Acc = set_combine(sets.precast.WS['Shadow of Death'], {head="Ignominy Burgeonet +3", feet="Heathen's Sollerets +1"})
-- Sword WS's
-- SANGUINE BLADE
-- 50% MND / 50% STR Darkness Elemental
sets.precast.WS['Sanguine Blade'] = set_combine(sets.precast.WS, {
head="Pixie Hairpin +1",
neck="Eddy Necklace",
ear1="Friomisi Earring",
body="Fallen's Cuirass +3",
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}},
back=Ankou.WSD,
feet="Heathen's Sollerets +1"
})
sets.precast.WS['Sanguine Blade'].Mid = set_combine(sets.precast.WS['Sanguine Blade'], sets.precast.WS.Mid)
sets.precast.WS['Sanguine Blade'].Acc = set_combine(sets.precast.WS['Sanguine Blade'], sets.precast.WS.Acc)
-- REQUISCAT
-- 73% MND - breath damage
sets.precast.WS.Requiescat = set_combine(sets.precast.WS, {
head="Flamma Zucchetto +2",
neck="Abyssal Bead Necklace +2",
body="Ignominy Cuirass +3",
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}},
waist="Fotia Belt",
})
sets.precast.WS.Requiescat.Mid = set_combine(sets.precast.WS.Requiscat, sets.precast.WS.Mid)
sets.precast.WS.Requiescat.Acc = set_combine(sets.precast.WS.Requiscat, sets.precast.WS.Acc)
-- Idle sets
sets.idle.Town = {
ranged="Mengado",
head="Hjarrandi Helm",
neck="Sanctity Necklace",
body="Hjarrandi Breast.",
hands="Sulevia's Gauntlets +2",
left_ear="Telos Earring",
right_ear="Cessance Earring",
ring1="Chirich Ring +1",
ring2="Stikini Ring +1",
waist="Ioskeha Belt +1",
legs="Carmine Cuisses",
feet={ name="Fall. Sollerets +3", augments={'Enhances "Desperate Blows" effect',}},
back=Ankou.STP,
}
sets.idle.Field = {
head="Hjarrandi Helm", -- Haste 3%
body="Hjarrandi Breast.", -- Haste 1%
hands="Sulev. Gauntlets +2", -- Haste 3%
legs="Carmine Cuisses",
feet={ name="Fall. Sollerets +3", augments={'Enhances "Desperate Blows" effect',}},
neck="Sanctity Necklace",
waist="Flume Belt +1",
left_ear="Telos Earring",
right_ear="Cessance Earring",
left_ring="Stikini Ring +1",
right_ring="Chirich Ring +1",
back=Ankou.VIT
}
sets.idle.Regen = set_combine(sets.idle.Field, {
neck="Sanctity Necklace",
body="Lugra Cloak +1",
ring1="Chirich Ring +1",
ring2="Chirish Ring +1"
})
sets.idle.Refresh = set_combine(sets.idle.Regen, {
neck="Bale Choker",
left_ring="Stikini Ring +1",
right_ring="Stikini Ring +1"
})
sets.idle.Weak = set_combine(sets.defense.PDT, sets.Reraise)
-- Defense sets
sets.defense.PDT = {
ammo="Brigantia Pebble",
head="Hjarrandi Helm", -- Haste 3%
body="Hjarrandi Breast.", -- Haste 1%
hands="Sulev. Gauntlets +2", -- Haste 3%
legs="Sulev. Cuisses +2", -- Haste 2%
feet="Sulev. Leggings +2", -- Haste 1%
neck="Loricate Torque +1",
waist="Flume Belt +1",
left_ear="Thureous Earring",
right_ear="Impreg. Earring",
left_ring="Defending Ring",
right_ring="Paguroidea Ring",
back=Ankou.WSD,
}
sets.defense.Reraise = set_combine(sets.idle.Weak, {head="Twilight Helm",body="Twilight Mail"})
sets.defense.MDT = set_combine(sets.defense.PDT, {ammo="Vanir Battery",waist="Asklepian Belt"})
sets.Kiting = {
legs="Carmine Cuisses",
}
sets.Reraise = {head="Twilight Helm",body="Twilight Mail"}
-- Base set (global catch-all set)
sets.engaged = {
ammo="Ginsen",
head="Hjarrandi Helm",
body="Hjarrandi Breast.",
hands="Sulev. Gauntlets +2",
legs="Sulev. Cuisses +2",
feet="Sulev. Leggings +2",
neck="Abyssal Beads +2",
waist="Ioskeha Belt +1",
left_ear="Telos Earring",
right_ear="Cessance Earring",
left_ring="Chirich Ring +1",
right_ring={name="Chirich Ring +1", bag="Wardrobe 3", priority=1},
back=Ankou.STP,
}
sets.engaged.STP = {
ammo="Ginsen",
head="Sulevia's Mask +2",
body="Hjarrandi Breast.",
hands="Flam. Manopolas +2",
legs="Flamma Dirs +2",
feet="Flam. Gambieras +2",
neck="Abyssal Beads +2",
waist="Kentarch Belt +1",
left_ear="Telos Earring",
right_ear="Cessance Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back=Ankou.STP,
}
sets.engaged.DA = {
ammo="Ginsen",
head="Hjarrandi Helm",
body="Hjarrandi Breast.",
hands="Sulev. Gauntlets +2",
legs="Ig. Flanchard +2",
feet="Flam. Gambieras +2",
neck="Abyssal Beads +2",
waist="Ioskeha Belt +1",
left_ear="Brutal Earring",
right_ear="Cessance Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back=Ankou.DA,
}
-- dual wield
sets.engaged.DW = set_combine(sets.engaged, {
waist="Patentia Sash",
legs="Carmine Cuisses",
})
sets.engaged.DW.Mid = set_combine(sets.engaged.DW, {
neck="Abyssal Bead Necklace +2",
})
-- single wield (sword + shield possibly)
sets.engaged.SW = {}
sets.engaged.SW.Mid = set_combine(sets.engaged.Mid, {})
sets.engaged.SW.Acc = set_combine(sets.engaged.Acc, {})
sets.engaged.Reraise = set_combine(sets.engaged, {
head="Twilight Helm",
neck="Loricate Torque +1",
body="Twilight Mail"
})
sets.buff.Souleater = {
head="Ignominy Burgonet +3",
--body="Ratri Breastplate",
}
sets.buff['Last Resort'] = {
feet="Fallen's Sollerets +3"
}
end
function job_pretarget(spell, action, spellMap, eventArgs)
if spell.type:endswith('Magic') and buffactive.silence then
eventArgs.cancel = true
send_command('input /item "Echo Drops" <me>')
end
end
function job_pretarget(spell, action, spellMap, eventArgs)
if spell.type:endswith('Magic') and buffactive.cursed then
eventArgs.cancel = true
send_command('input /item "Holy Water" <me>')
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)
aw_custom_aftermath_timers_precast(spell)
end
function job_post_precast(spell, action, spellMap, eventArgs)
local recast = windower.ffxi.get_ability_recasts()
-- Make sure abilities using head gear don't swap
if spell.type:lower() == 'weaponskill' then
-- handle Gavialis Helm
-- if use_gavialis then
-- if is_sc_element_today(spell) then
-- if wsList:contains(spell.english) then
-- -- do nothing
-- else
-- equip(sets.WSDayBonus)
-- end
-- end
-- end
-- CP mantle must be worn when a mob dies, so make sure it's equipped for WS.
if state.CapacityMode.value then
equip(sets.CapacityMantle)
end
-- if spell.english == 'Entropy' and recast[95] == 0 then
-- eventArgs.cancel = true
-- send_command('@wait 4.0;input /ja "Consume Mana" <me>')
-- --windower.chat.input:schedule(1, '/ws "Entropy" <t>')
-- return
-- end
if player.tp > 2999 then
if wsList:contains(spell.english) then
equip(sets.IshvaraLugra)
else
equip(sets.BrutalLugra)
end
else -- use Lugra + moonshade
if world.time >= (17*60) or world.time <= (7*60) then
equip(sets.Lugra)
else
if wsList:contains(spell.english) then
equip(sets.Ishvara)
else
equip(sets.Brutal)
end
end
end
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)
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.english:startswith('Drain') then
if player.status == 'Engaged' and state.CastingMode.current == 'Normal' and player.hpp < 70 then
classes.CustomClass = 'OhShit'
end
end
if (state.HybridMode.current == 'PDT' and state.PhysicalDefenseMode.current == 'Reraise') then
equip(sets.Reraise)
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)
aw_custom_aftermath_timers_aftercast(spell)
if state.Buff[spell.english] ~= nil then
state.Buff[spell.english] = not spell.interrupted or buffactive[spell.english]
end
end
function job_post_aftercast(spell, action, spellMap, eventArgs)
if spell.type == 'WeaponSkill' then
if state.Buff.Souleater and state.SouleaterMode.value then
send_command('@wait 1.0;cancel souleater')
--enable("head")
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- Customization hooks for idle and melee sets, after they've been automatically constructed.
-------------------------------------------------------------------------------------------------------------------
-- Called before the Include starts constructing melee/idle/resting sets.
-- Can customize state or custom melee class values at this point.
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_handle_equipping_gear(status, eventArgs)
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if player.mpp < 70 then
idleSet = set_combine(idleSet, sets.idle.Refresh)
end
if player.hpp < 70 then
idleSet = set_combine(idleSet, sets.idle.Regen)
end
if state.IdleMode.current == 'Sphere' then
idleSet = set_combine(idleSet, sets.idle.Sphere)
end
if state.HybridMode.current == 'PDT' then
idleSet = set_combine(idleSet, sets.defense.PDT)
end
return idleSet
end
-- Modify the default melee set after it was constructed.
function customize_melee_set(meleeSet)
if state.TreasureMode.value == 'Fulltime' then
meleeSet = set_combine(meleeSet, sets.TreasureHunter)
end
if state.CapacityMode.value then
meleeSet = set_combine(meleeSet, sets.CapacityMantle)
end
if state.Buff['Souleater'] then
meleeSet = set_combine(meleeSet, sets.buff.Souleater)
end
--meleeSet = set_combine(meleeSet, select_earring())
return meleeSet
end
-------------------------------------------------------------------------------------------------------------------
-- General hooks for other events.
-------------------------------------------------------------------------------------------------------------------
-- Called when the player's status changes.
function job_status_change(newStatus, oldStatus, eventArgs)
if newStatus == "Engaged" then
--if state.Buff['Last Resort'] then
-- send_command('@wait 1.0;cancel hasso')
--end
-- handle weapon sets
if remaWeapons:contains(player.equipment.main) then
state.CombatWeapon:set(player.equipment.main)
end
-- if gsList:contains(player.equipment.main) then
-- state.CombatWeapon:set("GreatSword")
-- elseif scytheList:contains(player.equipment.main) then
-- state.CombatWeapon:set("Scythe")
-- elseif remaWeapons:contains(player.equipment.main) then
-- state.CombatWeapon:set(player.equipment.main)
-- else -- use regular set, which caters to Liberator
-- state.CombatWeapon:reset()
-- end
--elseif newStatus == 'Idle' then
-- determine_idle_group()
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 state.Buff[buff] ~= nil then
handle_equipping_gear(player.status)
end
if S{'haste', 'march', 'embrava', 'geo-haste', 'indi-haste', 'last resort'}:contains(buff:lower()) then
if (buffactive['Last Resort']) then
if (buffactive.embrava or buffactive.haste) and buffactive.march then
state.CombatForm:set("Haste")
if not midaction() then
handle_equipping_gear(player.status)
end
end
else
if state.CombatForm.current ~= 'DW' and state.CombatForm.current ~= 'SW' then
state.CombatForm:reset()
end
if not midaction() then
handle_equipping_gear(player.status)
end
end
end
-- Drain II/III HP Boost. Set SE to stay on.
if buff == "Max HP Boost" and state.SouleaterMode.value then
if gain or buffactive['Max HP Boost'] then
state.SouleaterMode:set(false)
else
state.SouleaterMode:set(true)
end
end
-- Make sure SE stays on for BW
if buff == 'Blood Weapon' and state.SouleaterMode.value then
if gain or buffactive['Blood Weapon'] then
state.SouleaterMode:set(false)
else
state.SouleaterMode:set(true)
end
end
-- AM custom groups
if buff:startswith('Aftermath') then
if player.equipment.main == 'Liberator' then
classes.CustomMeleeGroups:clear()
if (buff == "Aftermath: Lv.3" and gain) or buffactive['Aftermath: Lv.3'] then
classes.CustomMeleeGroups:append('AM3')
add_to_chat(8, '-------------Mythic AM3 UP-------------')
-- elseif (buff == "Aftermath: Lv.3" and not gain) then
-- add_to_chat(8, '-------------Mythic AM3 DOWN-------------')
end
if not midaction() then
handle_equipping_gear(player.status)
end
else
classes.CustomMeleeGroups:clear()
if buff == "Aftermath" and gain or buffactive.Aftermath then
classes.CustomMeleeGroups:append('AM')
end
if not midaction() then
handle_equipping_gear(player.status)
end
end
end
-- if buff == "Samurai Roll" then
-- classes.CustomRangedGroups:clear()
-- if (buff == "Samurai Roll" and gain) or buffactive['Samurai Roll'] then
-- classes.CustomRangedGroups:append('SamRoll')
-- end
-- end
--if buff == "Last Resort" then
-- if gain then
-- send_command('@wait 1.0;cancel hasso')
-- else
-- if not midaction() then
-- send_command('@wait 1.0;input /ja "Hasso" <me>')
-- end
-- end
--end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements self-commands.
-------------------------------------------------------------------------------------------------------------------
-- 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)
war_sj = player.sub_job == 'WAR' or false
get_combat_form()
get_combat_weapon()
update_melee_groups()
select_default_macro_book()
end
-- State buff checks that will equip buff gear and mark the event as handled.
function check_buff(buff_name, eventArgs)
if state.Buff[buff_name] then
equip(sets.buff[buff_name] or {})
if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
equip(sets.TreasureHunter)
end
eventArgs.handled = true
end
end
-- Check for various actions that we've specified in user code as being used with TH gear.
-- This will only ever be called if TreasureMode is not 'None'.
-- Category and Param are as specified in the action event packet.
--function th_action_check(category, param)
-- if category == 2 or -- any ranged attack
-- --category == 4 or -- any magic action
-- (category == 3 and param == 30) or -- Aeolian Edge
-- (category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
-- (category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
-- then
-- return true
-- end
--end
-- function get_custom_wsmode(spell, spellMap, default_wsmode)
-- if state.OffenseMode.current == 'Mid' then
-- if buffactive['Aftermath: Lv.3'] then
-- return 'AM3Mid'
-- end
-- elseif state.OffenseMode.current == 'Acc' then
-- if buffactive['Aftermath: Lv.3'] then
-- return 'AM3Acc'
-- end
-- else
-- if buffactive['Aftermath: Lv.3'] then
-- return 'AM3'
-- end
-- end
-- end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
function get_combat_form()
if S{'NIN', 'DNC'}:contains(player.sub_job) and swordList:contains(player.equipment.main) then
state.CombatForm:set("DW")
--elseif player.equipment.sub == '' or shields:contains(player.equipment.sub) then
elseif swordList:contains(player.equipment.main) then
state.CombatForm:set("SW")
elseif buffactive['Last Resort'] then
if (buffactive.embrava or buffactive.haste) and buffactive.march then
add_to_chat(8, '-------------Delay Capped-------------')
state.CombatForm:set("Haste")
else
state.CombatForm:reset()
end
else
state.CombatForm:reset()
end
end
function get_combat_weapon()
state.CombatWeapon:reset()
if remaWeapons:contains(player.equipment.main) then
state.CombatWeapon:set(player.equipment.main)
end
-- if remaWeapons:contains(player.equipment.main) then
-- state.CombatWeapon:set(player.equipment.main)
-- elseif gsList:contains(player.equipment.main) then
-- state.CombatWeapon:set("GreatSword")
-- elseif scytheList:contains(player.equipment.main) then
-- state.CombatWeapon:set("Scythe")
-- end
end
function aw_custom_aftermath_timers_precast(spell)
if spell.type == 'WeaponSkill' then
info.aftermath = {}
local mythic_ws = "Insurgency"
info.aftermath.weaponskill = mythic_ws
info.aftermath.duration = 0
info.aftermath.level = math.floor(player.tp / 1000)
if info.aftermath.level == 0 then
info.aftermath.level = 1
end
if spell.english == mythic_ws and player.equipment.main == 'Liberator' then
-- nothing can overwrite lvl 3
if buffactive['Aftermath: Lv.3'] then
return
end
-- only lvl 3 can overwrite lvl 2
if info.aftermath.level ~= 3 and buffactive['Aftermath: Lv.2'] then
return
end
if info.aftermath.level == 1 then
info.aftermath.duration = 90
elseif info.aftermath.level == 2 then
info.aftermath.duration = 120
else
info.aftermath.duration = 180
end
end
end
end
-- Call from job_aftercast() to create the custom aftermath timer.
function aw_custom_aftermath_timers_aftercast(spell)
if not spell.interrupted and spell.type == 'WeaponSkill' and
info.aftermath and info.aftermath.weaponskill == spell.english and info.aftermath.duration > 0 then
local aftermath_name = 'Aftermath: Lv.'..tostring(info.aftermath.level)
send_command('timers d "Aftermath: Lv.1"')
send_command('timers d "Aftermath: Lv.2"')
send_command('timers d "Aftermath: Lv.3"')
send_command('timers c "'..aftermath_name..'" '..tostring(info.aftermath.duration)..' down abilities/aftermath'..tostring(info.aftermath.level)..'.png')
info.aftermath = {}
end
end
function display_current_job_state(eventArgs)
local msg = ''
msg = msg .. 'Offense: '..state.OffenseMode.current
msg = msg .. ', Hybrid: '..state.HybridMode.current
if state.DefenseMode.value ~= 'None' then
local defMode = state[state.DefenseMode.value ..'DefenseMode'].current
msg = msg .. ', Defense: '..state.DefenseMode.value..' '..defMode
end
if state.CombatForm.current ~= '' then
msg = msg .. ', Form: ' .. state.CombatForm.current
end
if state.CombatWeapon.current ~= '' then
msg = msg .. ', Weapon: ' .. state.CombatWeapon.current
end
if state.CapacityMode.value then
msg = msg .. ', Capacity: ON, '
end
if state.SouleaterMode.value then
msg = msg .. ', SE Cancel, '
end
-- if state.LastResortMode.value then
-- msg = msg .. ', LR Defense, '
-- end
if state.PCTargetMode.value ~= 'default' then
msg = msg .. ', Target PC: '..state.PCTargetMode.value
end
if state.SelectNPCTargets.value then
msg = msg .. ', Target NPCs'
end
add_to_chat(123, msg)
eventArgs.handled = true
end
-- Set eventArgs.handled to true if we don't want the automatic display to be run.
-- Handle notifications of general user state change.
function job_state_change(stateField, newValue, oldValue)
end
-- Creating a custom spellMap, since Mote capitalized absorbs incorrectly
function job_get_spell_map(spell, default_spell_map)
if spell.skill == 'Dark Magic' and absorbs:contains(spell.english) then
return 'Absorb'
end
-- if spell.type == 'Trust' then
-- return 'Trust'
-- end
end
function select_earring()
if world.time >= (17*60) or world.time <= (7*60) then
return sets.Lugra
else
return sets.Brutal
end
end
function update_melee_groups()
classes.CustomMeleeGroups:clear()
-- mythic AM
if player.equipment.main == 'Liberator' then
if buffactive['Aftermath: Lv.3'] then
classes.CustomMeleeGroups:append('AM3')
end
else
-- relic AM
if buffactive['Aftermath'] then
classes.CustomMeleeGroups:append('AM')
end
-- if buffactive['Samurai Roll'] then
-- classes.CustomRangedGroups:append('SamRoll')
-- end
end
end
function select_default_macro_book()
-- Default macro set/book
-- set_macro_page(5, 4)
-- if player.sub_job == 'DNC' then
-- set_macro_page(8, 4)
if scytheList:contains(player.equipment.main) then
set_macro_page(9, 8)
elseif gsList:contains(player.equipment.main) then
set_macro_page(1, 8)
elseif player.sub_job == 'SAM' then
set_macro_page(2, 8)
elseif swordList:contains(player.equipment.main) then
set_macro_page(7, 8)
end
end
By Galkapryme 2019-12-26 22:27:58
While that lua is far from perfect, you might note that I opted for certain pieces over others, despite having what, on the surface, looks like a better piece. Ex: I have feet pieces with +23 MAB, but I chose Heathen Feet +1 (20 MAB) because of the +30 Occult Acumen.
Quetzalcoatl.Orestes
Serveur: Quetzalcoatl
Game: FFXI
Posts: 430
By Quetzalcoatl.Orestes 2019-12-27 00:30:02
That looks like mine
It supports named based weapon sets, aftermath sets, haste modes, plus all of mote's default rules and some special stuff. It is tailored for me, FWIW.
If anyone has a compelling reason to add something, I would consider it though.
Serveur: Asura
Game: FFXI
Posts: 1400
By Asura.Toralin 2019-12-27 07:42:02
can some one post a updated lua link please
Here's mine. I didn't create it, but I suppose I reconfigured it a bit, and it includes relatively updated gear. I forget who the original author was. NOTE: There are still some things I have yet to acquire, and some aspects of the lua that I haven't touched because I don't use them.
Code
--[[
=== Features ===
If you want auto Reive detection for Ygnas Resolve+1, and Gavialis Helm for some of your WS, then you will need my User-Globals.lua
Otherwise, you might be able to get away without it. (not tested)
If you don't use organizer, then remove the include('organizer-lib') in get_sets() and remove sets.Organizer
This lua has a few MODES you can toggle with hotkeys or macros, and there's a few situational RULES that activate without hotkeys
::MODES::
SouleaterMode
Status: OFF by default.
Hotkey: Toggle this with @F9 (window key + F9).
Macro: /console gs c togggle SouleaterMode
Notes: This mode makes it possible to use Souleater in situations where you would normally avoid using it. When SouleaterMode
is ON, Souleater will be canceled automatically after the first Weaponskill used. CAVEAT -. If Bloodweapon
is active, or if Drain's HP Boost buff is active, then Souleater will remain active until the next WS used after
either buff wears off.
CapacityMode
Status: OFF by default.
Hotkey: with ALT + =
Macro: /console cs c toggle CapacityMode
Notes: It will full-time whichever piece of gear you specify in sets.CapacityMantle
Extra Info: You can change the default (true|false) status of any MODE by changing their values in job_setup()
::RULES::
Gavialis helm
Status: enabled
Setting: set use_gavialis = true below in job_setup.
Notes: Gavialis Helm will automatically be used for all weaponskills on their respective days of the week. If you would like to
exclude a weapon skill, you must add it to wsList below. (found in job_setup) You also need my User-Globals.lua for this
to even work.
Ygna's Resolve +1
Status: enabled in Reive
Setting: n/a
Notes: Will automatically be used when you're in a reive. If you have my User-Globals.lua this will work
with all your jobs that use mote's includes. Not just this one!
Moonshade earring
Status: Not used for WS's at 3000 TP.
Setting: n/a
You can hit F12 to display custom MODE status as well as the default stuff.
Single handed weapons are handled in the sets.engaged.SW set. (sword + shield, etc.)
::NOTES::
My sets have a specific order, or they will not function correctly.
sets.engaged.[CombatForm][CombatWeapon][Offense or HybridMode][CustomMeleeGroups or CustomClass]
CombatForm = Haste, DW, SW
CombatWeapon = GreatSword, Scythe, Apocalypse, Ragnarok, Caladbolg, Liberator, Anguta
OffenseMode = Mid, Acc
HybridMode = PDT
CustomMeleeGroups = AM3, AM, Haste
CustomClass = OhShit
CombatForm Haste is used when Last Resort + Hasso AND either Haste, March, Indi-Haste Geo-Haste is on you.
CombatForm DW will activate with /dnc or /nin AND a weapon listed in drk_sub_weapons equipped offhand.
SW is active with an empty sub-slot, or a shield listed in the shields = S{} list.
CombatWeapon GreatSword will activate when you equip a GS listed in gsList in job_setup().
CombatWeapon Scythe will activate when you equip a Scythe listed in scytheList in job_setup().
Weapons that do not fall into these groups, or have sets by weapon name, will use default sets.engaged
most gear sets derrive themselves from sets.engaged, so try to keep it updated. It's much smarter to derrive sets than to
completely re-invent each gear set for every weapon. Let your gear inherit. Less code written means less errors.
CustomMeleeGroups AM3 will activate when Aftermath lvl 3 is up, and CustomMeleeGroups AM will activate when relic Aftermath is up.
There are no empy AM sets for now.
--]]
--
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
include('organizer-lib')
end
-- Setup vars that are user-independent.
function job_setup()
state.CapacityMode = M(false, 'Capacity Point Mantle')
include('Mote-TreasureHunter')
state.TreasureMode:set('Tag')
state.Buff.Souleater = buffactive.souleater or false
state.Buff['Last Resort'] = buffactive['Last Resort'] or false
-- Set the default to false if you'd rather SE always stay acitve
state.SouleaterMode = M(false, 'Soul Eater Mode')
-- state.LastResortMode = M(false, 'Last Resort Mode')
-- Use Gavialis helm?
use_gavialis = true
-- Weaponskills you do NOT want Gavialis helm used with (only considered if use_gavialis = true)
wsList = S{'Spiral Hell', 'Catastrophe', 'Torcleaver', 'Insurgency', 'Quietus', 'Cross Reaper'}
-- Greatswords you use.
gsList = S{'Malfeasance', 'Macbain', 'Nanadaka', 'Mekosuchus Blade', 'Ragnarok', 'Raetic Algol', 'Raetic Algol +1', 'Caladbolg', 'Montante +1', 'Albion' }
scytheList = S{'Liberator', 'Apocalypse', 'Anguta', 'Raetic Scythe', 'Deathbane', 'Twilight Scythe' }
remaWeapons = S{'Apocalypse', 'Anguta', 'Liberator', 'Caladbolg', 'Ragnarok'}
shields = S{'Rinda Shield'}
-- Mote has capitalization errors in the default Absorb mappings, so we use our own
absorbs = S{'Absorb-STR', 'Absorb-DEX', 'Absorb-VIT', 'Absorb-AGI', 'Absorb-INT', 'Absorb-MND', 'Absorb-CHR', 'Absorb-Attri', 'Absorb-ACC', 'Absorb-TP'}
-- Offhand weapons used to activate DW mode
swordList = S{"Sangarius", "Sangarius +1", "Usonmunku", "Perun +1", "Tanmogayi", "Naegling"}
get_combat_form()
get_combat_weapon()
update_melee_groups()
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','STP','DA')
state.WeaponskillMode:options('Normal', 'Mid', 'Acc')
state.CastingMode:options('Normal', 'Acc')
state.IdleMode:options('Town', 'Normal', 'Regen', 'Refresh', 'Weak')
state.RestingMode:options('Normal')
state.PhysicalDefenseMode:options('PDT', 'Reraise')
state.MagicalDefenseMode:options('MDT')
state.HybridMode:options('Normal', 'PDT')
war_sj = player.sub_job == 'WAR' or false
-- Additional local binds
send_command('bind ^= gs c cycle treasuremode')
send_command('bind != gs c toggle CapacityMode')
send_command('bind @f9 gs c toggle SouleaterMode')
send_command('bind !- gs equip sets.crafting')
send_command('bind f1 gs c cycle OffenseMode')
send_command('bind f10 gs c cycle PhysicalDefenseMode')
send_command('bind f11 gs c cycle MagicalDefenseMode')
send_command('bind f2 gs c cycle IdleMode')
--send_command('bind ^` gs c toggle LastResortMode')
select_default_macro_book()
end
-- Called when this job file is unloaded (eg: job change)
function file_unload()
send_command('unbind ^`')
send_command('unbind !=')
send_command('unbind ^[')
send_command('unbind ![')
send_command('unbind @f9')
send_command('unbind f1')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Start defining the sets
--------------------------------------
-- Augmented gear
Niht = {name="Niht Mantle", augments={'Attack+10','Dark magic skill +8','"Drain" and "Aspir" potency +25'}}
Ankou = {}
Ankou.FC = { name="Ankou's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+9','"Fast Cast"+10','Spell interruption rate down-4%',}}
Ankou.STP = { name="Ankou's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+5','"Store TP"+10','Damage taken-5%',}}
Ankou.DA = { name="Ankou's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+2','"Dbl.Atk."+10',}}
Ankou.WSD = { name="Ankou's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%','Damage taken-5%',}}
Ankou.VIT = { name="Ankou's Mantle", augments={'VIT+1', 'Haste +10%',}}
Ankou.INT = { name="Ankou's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Fast Cast"+10','Spell interruption rate down-10%',}}
Odyssean = {}
Odyssean.Head = { name="Odyssean Helm", augments={'"Mag.Atk.Bns."+12','Pet: Crit.hit rate +4','Chance of successful block +4','Mag. Acc.+19 "Mag.Atk.Bns."+19',}}
Odyssean.Body = { name="Odyss. Chestplate", augments={'"Mag.Atk.Bns."+24','"Fast Cast"+4','STR+1','Accuracy+13',}}
Odyssean.Hands = { name="Odyssean Gauntlets", augments={'"Dbl.Atk."+2','INT+13','Accuracy+12 Attack+12','Mag. Acc.+17 "Mag.Atk.Bns."+17',}}
Odyssean.Legs = { name="Odyssean Cuisses", augments={'INT+2','Potency of "Cure" effect received+4%','Accuracy+17 Attack+17','Mag. Acc.+17 "Mag.Atk.Bns."+17',}}
Odyssean.Feet = { name="Odyssean Greaves", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','AGI+7','"Mag.Atk.Bns."+3',}}
sets.TreasureHunter = {waist="Chaac Belt" }
sets.Organizer = {}
sets.precast.JA['Diabolic Eye'] = {hands="Fallen's Finger Gauntlets +3"}
sets.precast.JA['Nether Void'] = {legs="Heathen's Flanchard +1"}
sets.precast.JA['Dark Seal'] = {head="Fallen's burgeonet +3"}
sets.precast.JA['Souleater'] = {head="Ignominy burgeonet +3"}
sets.precast.JA['Weapon Bash'] = {hands="Ignominy Gauntlets +2",left_ring="Slayer's Ring"} --Skillchain Property
sets.precast.JA['Blood Weapon'] = {body="Fallen's Cuirass +3"}
sets.precast.JA['Last Resort'] = {feet="Fallen's Sollerets +3"}
sets.WSDayBonus = { head="Gavialis Helm" }
sets.WSBack = Ankou.WSD
-- Earring considerations, given Lugra's day/night stats
sets.BrutalLugra = { ear1="Brutal Earring", ear2="Lugra Earring" }
sets.IshvaraLugra = { ear1="Ishvara Earring", ear2="Lugra Earring" }
sets.Lugra = { ear1="Lugra Earring" }
sets.Brutal = { ear1="Brutal Earring" }
sets.Ishvara = { ear1="Ishvara Earring" }
-- Waltz set (chr and vit)
-- sets.precast.Waltz = {}
-- Fast cast sets for spells
sets.precast.FC = {
ammo="Impatiens",
head={ name="Carmine Mask", augments={'Accuracy+10','DEX+10','MND+15',}},
body={ name="Fall. Cuirass +3", augments={'Enhances "Blood Weapon" effect',}},
hands={ name="Leyline Gloves", augments={'Accuracy+15','Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+3',}},
legs="Arjuna Breeches",
feet={ name="Carmine Greaves +1", augments={'MP+80','INT+12','MND+12',}},
neck="Erra Pendant",
waist="Austerity Belt +1",
back=Ankou.INT,
}
sets.precast.FC['Elemental Magic'] = sets.precast.FC
sets.precast.FC['Enfeebling Magic'] = sets.precast.FC
sets.precast.FC['Dark Magic'] = set_combine(sets.precast.FC, {head={ name="Fall. Burgeonet +3", augments={'Enhances "Dark Seal" effect',}}})
-- Midcast Sets
sets.midcast.FastRecast = sets.precast.FC
-- sets.midcast.Trust = {
-- head={ name="Carmine Mask", augments={'Accuracy+10','DEX+10','MND+15',}},
-- hands="Leyline Gloves",
-- body="Fallen's Cuirass +3",
-- legs="Arjuna Breeches",
-- feet="Carmine Greaves +1"
-- }
sets.midcast["Apururu (UC)"] = set_combine(sets.midcast.Trust, {
body="Apururu Unity shirt",
})
-- Specific spells
sets.midcast.Utsusemi = sets.precast.FC
sets.midcast['Dark Magic'] = {
ammo="Strobilus",
head="Pixi Hairpin +1",
body={ name="Fall. Cuirass +3", augments={'Enhances "Blood Weapon" effect',}},
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}},
legs={ name="Fall. Flanchard +3", augments={'Enhances "Muted Soul" effect',}},
feet="Ratri Sollerets +1",
neck="Erra Pendant",
waist="Austerity Belt +1",
left_ear="Friomisi Earring",
right_ear="Crematio Earring",
left_ring="Archon Ring",
right_ring="Evanescence Ring",
back=Ankou.INT,
}
sets.midcast.Endark = sets.midcast['Dark Magic']
sets.midcast['Dark Magic'].Acc = set_combine(sets.midcast['Dark Magic'], {
head="Ratri Sallet +1", -- 45 macc
hands="Ratri gadlings +1" -- 44 macc
})
sets.midcast['Enfeebling Magic'] = {
ammo="Strobilus",
head={ name="Fall. Burgeonet +3", augments={'Enhances "Dark Seal" effect',}},
neck="Erra Pendant", -- Dark Magic Skill 10 + 17 macc
body="Ignominy Cuirass +3",
hands="Ratri gadlings +1", -- 44 macc
ring1="Stikini Ring +1", -- 11 macc
ring2="Kishar Ring",
waist="Austerity Belt +1",
legs="Fallen's Flanchard +3", -- Dark Magic Skill 18 + 39macc
back=Ankou.INT,
feet="Flamma Gambieras +2"
}
sets.midcast['Elemental Magic'] = {
ammo="Strobilus",
head={ name="Odyssean Helm", augments={'"Mag.Atk.Bns."+12','Pet: Crit.hit rate +4','Chance of successful block +4','Mag. Acc.+19 "Mag.Atk.Bns."+19',}},
neck="Eddy Necklace", -- macc 5, 11 matk
ear1="Friomisi Earring", -- 10 matk
right_ear="Crematio Earring", -- matk 6, mdmg +6
body={ name="Fall. Cuirass +3", augments={'Enhances "Blood Weapon" effect',}}, -- macc 40, matk 60
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}}, -- macc 38, matk 62
ring1="Fenrir Ring +1", -- macc/matk 3, mdmg 5
ring2="Fenrir Ring +1", -- macc/matk 3, mdmg 5
waist="Austerity Belt +1", -- macc/matk 7
legs={ name="Odyssean Cuisses", augments={'INT+2','Potency of "Cure" effect received+4%','Accuracy+17 Attack+17','Mag. Acc.+17 "Mag.Atk.Bns."+17',}},
back=Ankou.INT, -- macc 29, mdmg 20
feet="Heathen's Sollerets +1" -- macc/matk 20, Occult Acumen 30
}
-- Mix of HP boost, -Spell interruption%, and Dark Skill
sets.midcast['Dread Spikes'] = set_combine(sets.midcast['Dark Magic'], {
ammo="Strobilus",
head="Ignominy Burgonet +3", -- 17
left_ear="Friomisi Earring",
right_ear="Crematio Earring",
body="Heathen's Cuirass +1",
hands="Fallen's Finger Gauntlets +3",
back=Ankou.INT,
})
sets.midcast['Dread Spikes'].Acc = set_combine(sets.midcast['Dark Magic'], {
body="Heathen's Cuirass +1",
hands="Fallen's Finger Gauntlets +3"
})
-- Drain spells
sets.midcast.Drain = sets.midcast['Dark Magic']
sets.midcast.Aspir = sets.midcast.Drain
sets.midcast.Drain.Acc = set_combine(sets.midcast.Drain, {
hands="Leyline Gloves",
waist="Eschan Stone", -- macc/matk 7
})
sets.midcast.Aspir.Acc = sets.midcast.Drain.Acc
sets.midcast.Drain.OhShit = set_combine(sets.midcast.Drain, {
legs="Carmine Cuisses",
feet="Ratri Sollerets +1"
})
-- Absorbs
sets.midcast.Absorb = set_combine(sets.midcast['Dark Magic'], {
head="Ignominy Burgonet +3", -- Absorb duration 20
feet="Ratri Sollerets +1",
ring2="Kishar Ring",
back=Ankou.INT,
})
sets.midcast['Absorb-TP'] = set_combine(sets.midcast.Absorb, {
hands="Heathen's Gauntlets +1",
ring2="Kishar Ring",
})
sets.midcast['Absorb-TP'].Acc = set_combine(sets.midcast.Absorb.Acc, {
hands="Heathen's Gauntlets +1",
ring2="Kishar Ring",
})
sets.midcast.Absorb.Acc = set_combine(sets.midcast['Dark Magic'].Acc, {
head="Flamma Zucchetto +2", -- 44 macc
back=Ankou.INT,
hands="Ratri gadlings +1",
ring2="Kishar Ring",
})
-- Ranged for xbow
sets.precast.RA = {}
sets.midcast.RA = {}
-- WEAPONSKILL SETS
-- General sets
-- Balanced (Acc and WSD) WSD +74
sets.precast.WS = {
ammo="Knobkierrie", --WSD +6
head={ name="Fall. Burgeonet +3", augments={'Enhances "Dark Seal" effect',}},
body="Ignominy Cuirass +3", --WSD +10
hands="Ratri Gadlings +1", --WSD +8
legs={ name="Fall. Flanchard +3", augments={'Enhances "Muted Soul" effect',}}, --WSD +10
feet="Ratri Sollerets +1", --WSD +8
neck="Fotia Gorget", --WSA/WSD +10
waist="Fotia Belt", --WSA/WSD +10
left_ear="Telos Earring",
right_ear="Ishvara Earring", --WSD +2
left_ring="Chirich Ring",
right_ring="Ifrit Ring +1",
back=Ankou.WSD, -- WSD +10
}
-- CATASTROPHE
-- 40% STR/40% INT
-- +68% Catastrophe Damage
sets.precast.WS['Catasrophe'] = {
main="Apocalypse",
sub="Utu Grip",
ammo="Knobkierrie",
head="Ratri Sallet +1",
body="Ignominy Cuirass +3",
hands="Rat. Gadlings +1",
legs={ name="Fall. Flanchard +3", augments={'Enhances "Muted Soul" effect',}},
feet="Rat. Sollerets +1",
neck="Abyssal Beads +2",
waist="Fotia Belt",
left_ear="Ishvara Earring",
right_ear="Lugra Earring +1",
left_ring="Niqmaddu Ring",
right_ring="Ifrit Ring +1",
back=Ankou.WSD,
}
-- RESOLUTION
-- 86-100% STR
sets.precast.WS.Resolution = sets.precast.WS
sets.precast.WS.Resolution.Acc = sets.precast.WS
-- TORCLEAVER
-- VIT 80%
sets.precast.WS.Torcleaver = sets.precast.WS
sets.precast.WS.Torcleaver.Mid = set_combine(sets.precast.WS.Mid, {
neck="Abyssal Bead Necklace +2",
})
sets.precast.WS.Torcleaver.Acc = sets.precast.WS.Torcleaver.Mid
-- INSURGENCY
-- 20% STR / 20% INT
-- Base set only used at 3000TP to put AM3 up
sets.precast.WS.Insurgency = set_combine(sets.precast.WS, {head="Ratri Sallet +1"})
-- CROSS REAPER
-- 60% STR / 60% MND
sets.precast.WS['Cross Reaper'] = sets.precast.WS
-- ENTROPY
-- 86-100% INT
sets.precast.WS['Entropy'] = {
ammo="Knobkierrie",
head={ name="Odyssean Helm", augments={'"Mag.Atk.Bns."+12','Pet: Crit.hit rate +4','Chance of successful block +4','Mag. Acc.+19 "Mag.Atk.Bns."+19',}},
body={ name="Fall. Cuirass +3", augments={'Enhances "Blood Weapon" effect',}},
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}},
legs={ name="Fall. Flanchard +3", augments={'Enhances "Muted Soul" effect',}},
feet="Ratri Sollerets +1",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Friomisi Earring",
right_ear="Ishvara Earring",
left_ring="Fenrir Ring +1",
right_ring="Stikini Ring +1",
back=Ankou.WSD,
}
-- Quietus
-- 60% STR / MND
sets.precast.WS['Quietus'] = sets.precast.WS['Catastrophe']
-- SPIRAL HELL
-- 50% STR / 50% INT
sets.precast.WS['Spiral Hell'] = sets.precast.WS['Catastrophe']
-- SHADOW OF DEATH
-- 40% STR 40% INT - Darkness Elemental
sets.precast.WS['Shadow of Death'] = set_combine(sets.precast.WS['Entropy'], {
head="Pixie Hairpin +1",
neck="Eddy Necklace",
})
sets.precast.WS['Shadow of Death'].Mid = set_combine(sets.precast.WS['Shadow of Death'], sets.precast.WS.Mid, {
})
sets.precast.WS['Shadow of Death'].Acc = set_combine(sets.precast.WS['Shadow of Death'], sets.precast.WS.Acc, {
})
-- DARK HARVEST
-- 40% STR 40% INT - Darkness Elemental
sets.precast.WS['Dark Harvest'] = sets.precast.WS['Shadow of Death']
sets.precast.WS['Dark Harvest'].Mid = set_combine(sets.precast.WS['Shadow of Death'], {head="Ignominy Burgeonet +3", feet="Heathen's Sollerets +1"})
sets.precast.WS['Dark Harvest'].Acc = set_combine(sets.precast.WS['Shadow of Death'], {head="Ignominy Burgeonet +3", feet="Heathen's Sollerets +1"})
-- Sword WS's
-- SANGUINE BLADE
-- 50% MND / 50% STR Darkness Elemental
sets.precast.WS['Sanguine Blade'] = set_combine(sets.precast.WS, {
head="Pixie Hairpin +1",
neck="Eddy Necklace",
ear1="Friomisi Earring",
body="Fallen's Cuirass +3",
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}},
back=Ankou.WSD,
feet="Heathen's Sollerets +1"
})
sets.precast.WS['Sanguine Blade'].Mid = set_combine(sets.precast.WS['Sanguine Blade'], sets.precast.WS.Mid)
sets.precast.WS['Sanguine Blade'].Acc = set_combine(sets.precast.WS['Sanguine Blade'], sets.precast.WS.Acc)
-- REQUISCAT
-- 73% MND - breath damage
sets.precast.WS.Requiescat = set_combine(sets.precast.WS, {
head="Flamma Zucchetto +2",
neck="Abyssal Bead Necklace +2",
body="Ignominy Cuirass +3",
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}},
waist="Fotia Belt",
})
sets.precast.WS.Requiescat.Mid = set_combine(sets.precast.WS.Requiscat, sets.precast.WS.Mid)
sets.precast.WS.Requiescat.Acc = set_combine(sets.precast.WS.Requiscat, sets.precast.WS.Acc)
-- Idle sets
sets.idle.Town = {
ranged="Mengado",
head="Hjarrandi Helm",
neck="Sanctity Necklace",
body="Hjarrandi Breast.",
hands="Sulevia's Gauntlets +2",
left_ear="Telos Earring",
right_ear="Cessance Earring",
ring1="Chirich Ring +1",
ring2="Stikini Ring +1",
waist="Ioskeha Belt +1",
legs="Carmine Cuisses",
feet={ name="Fall. Sollerets +3", augments={'Enhances "Desperate Blows" effect',}},
back=Ankou.STP,
}
sets.idle.Field = {
head="Hjarrandi Helm", -- Haste 3%
body="Hjarrandi Breast.", -- Haste 1%
hands="Sulev. Gauntlets +2", -- Haste 3%
legs="Carmine Cuisses",
feet={ name="Fall. Sollerets +3", augments={'Enhances "Desperate Blows" effect',}},
neck="Sanctity Necklace",
waist="Flume Belt +1",
left_ear="Telos Earring",
right_ear="Cessance Earring",
left_ring="Stikini Ring +1",
right_ring="Chirich Ring +1",
back=Ankou.VIT
}
sets.idle.Regen = set_combine(sets.idle.Field, {
neck="Sanctity Necklace",
body="Lugra Cloak +1",
ring1="Chirich Ring +1",
ring2="Chirish Ring +1"
})
sets.idle.Refresh = set_combine(sets.idle.Regen, {
neck="Bale Choker",
left_ring="Stikini Ring +1",
right_ring="Stikini Ring +1"
})
sets.idle.Weak = set_combine(sets.defense.PDT, sets.Reraise)
-- Defense sets
sets.defense.PDT = {
ammo="Brigantia Pebble",
head="Hjarrandi Helm", -- Haste 3%
body="Hjarrandi Breast.", -- Haste 1%
hands="Sulev. Gauntlets +2", -- Haste 3%
legs="Sulev. Cuisses +2", -- Haste 2%
feet="Sulev. Leggings +2", -- Haste 1%
neck="Loricate Torque +1",
waist="Flume Belt +1",
left_ear="Thureous Earring",
right_ear="Impreg. Earring",
left_ring="Defending Ring",
right_ring="Paguroidea Ring",
back=Ankou.WSD,
}
sets.defense.Reraise = set_combine(sets.idle.Weak, {head="Twilight Helm",body="Twilight Mail"})
sets.defense.MDT = set_combine(sets.defense.PDT, {ammo="Vanir Battery",waist="Asklepian Belt"})
sets.Kiting = {
legs="Carmine Cuisses",
}
sets.Reraise = {head="Twilight Helm",body="Twilight Mail"}
-- Base set (global catch-all set)
sets.engaged = {
ammo="Ginsen",
head="Hjarrandi Helm",
body="Hjarrandi Breast.",
hands="Sulev. Gauntlets +2",
legs="Sulev. Cuisses +2",
feet="Sulev. Leggings +2",
neck="Abyssal Beads +2",
waist="Ioskeha Belt +1",
left_ear="Telos Earring",
right_ear="Cessance Earring",
left_ring="Chirich Ring +1",
right_ring={name="Chirich Ring +1", bag="Wardrobe 3", priority=1},
back=Ankou.STP,
}
sets.engaged.STP = {
ammo="Ginsen",
head="Sulevia's Mask +2",
body="Hjarrandi Breast.",
hands="Flam. Manopolas +2",
legs="Flamma Dirs +2",
feet="Flam. Gambieras +2",
neck="Abyssal Beads +2",
waist="Kentarch Belt +1",
left_ear="Telos Earring",
right_ear="Cessance Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back=Ankou.STP,
}
sets.engaged.DA = {
ammo="Ginsen",
head="Hjarrandi Helm",
body="Hjarrandi Breast.",
hands="Sulev. Gauntlets +2",
legs="Ig. Flanchard +2",
feet="Flam. Gambieras +2",
neck="Abyssal Beads +2",
waist="Ioskeha Belt +1",
left_ear="Brutal Earring",
right_ear="Cessance Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back=Ankou.DA,
}
-- dual wield
sets.engaged.DW = set_combine(sets.engaged, {
waist="Patentia Sash",
legs="Carmine Cuisses",
})
sets.engaged.DW.Mid = set_combine(sets.engaged.DW, {
neck="Abyssal Bead Necklace +2",
})
-- single wield (sword + shield possibly)
sets.engaged.SW = {}
sets.engaged.SW.Mid = set_combine(sets.engaged.Mid, {})
sets.engaged.SW.Acc = set_combine(sets.engaged.Acc, {})
sets.engaged.Reraise = set_combine(sets.engaged, {
head="Twilight Helm",
neck="Loricate Torque +1",
body="Twilight Mail"
})
sets.buff.Souleater = {
head="Ignominy Burgonet +3",
--body="Ratri Breastplate",
}
sets.buff['Last Resort'] = {
feet="Fallen's Sollerets +3"
}
end
function job_pretarget(spell, action, spellMap, eventArgs)
if spell.type:endswith('Magic') and buffactive.silence then
eventArgs.cancel = true
send_command('input /item "Echo Drops" <me>')
end
end
function job_pretarget(spell, action, spellMap, eventArgs)
if spell.type:endswith('Magic') and buffactive.cursed then
eventArgs.cancel = true
send_command('input /item "Holy Water" <me>')
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)
aw_custom_aftermath_timers_precast(spell)
end
function job_post_precast(spell, action, spellMap, eventArgs)
local recast = windower.ffxi.get_ability_recasts()
-- Make sure abilities using head gear don't swap
if spell.type:lower() == 'weaponskill' then
-- handle Gavialis Helm
-- if use_gavialis then
-- if is_sc_element_today(spell) then
-- if wsList:contains(spell.english) then
-- -- do nothing
-- else
-- equip(sets.WSDayBonus)
-- end
-- end
-- end
-- CP mantle must be worn when a mob dies, so make sure it's equipped for WS.
if state.CapacityMode.value then
equip(sets.CapacityMantle)
end
-- if spell.english == 'Entropy' and recast[95] == 0 then
-- eventArgs.cancel = true
-- send_command('@wait 4.0;input /ja "Consume Mana" <me>')
-- --windower.chat.input:schedule(1, '/ws "Entropy" <t>')
-- return
-- end
if player.tp > 2999 then
if wsList:contains(spell.english) then
equip(sets.IshvaraLugra)
else
equip(sets.BrutalLugra)
end
else -- use Lugra + moonshade
if world.time >= (17*60) or world.time <= (7*60) then
equip(sets.Lugra)
else
if wsList:contains(spell.english) then
equip(sets.Ishvara)
else
equip(sets.Brutal)
end
end
end
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)
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.english:startswith('Drain') then
if player.status == 'Engaged' and state.CastingMode.current == 'Normal' and player.hpp < 70 then
classes.CustomClass = 'OhShit'
end
end
if (state.HybridMode.current == 'PDT' and state.PhysicalDefenseMode.current == 'Reraise') then
equip(sets.Reraise)
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)
aw_custom_aftermath_timers_aftercast(spell)
if state.Buff[spell.english] ~= nil then
state.Buff[spell.english] = not spell.interrupted or buffactive[spell.english]
end
end
function job_post_aftercast(spell, action, spellMap, eventArgs)
if spell.type == 'WeaponSkill' then
if state.Buff.Souleater and state.SouleaterMode.value then
send_command('@wait 1.0;cancel souleater')
--enable("head")
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- Customization hooks for idle and melee sets, after they've been automatically constructed.
-------------------------------------------------------------------------------------------------------------------
-- Called before the Include starts constructing melee/idle/resting sets.
-- Can customize state or custom melee class values at this point.
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_handle_equipping_gear(status, eventArgs)
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if player.mpp < 70 then
idleSet = set_combine(idleSet, sets.idle.Refresh)
end
if player.hpp < 70 then
idleSet = set_combine(idleSet, sets.idle.Regen)
end
if state.IdleMode.current == 'Sphere' then
idleSet = set_combine(idleSet, sets.idle.Sphere)
end
if state.HybridMode.current == 'PDT' then
idleSet = set_combine(idleSet, sets.defense.PDT)
end
return idleSet
end
-- Modify the default melee set after it was constructed.
function customize_melee_set(meleeSet)
if state.TreasureMode.value == 'Fulltime' then
meleeSet = set_combine(meleeSet, sets.TreasureHunter)
end
if state.CapacityMode.value then
meleeSet = set_combine(meleeSet, sets.CapacityMantle)
end
if state.Buff['Souleater'] then
meleeSet = set_combine(meleeSet, sets.buff.Souleater)
end
--meleeSet = set_combine(meleeSet, select_earring())
return meleeSet
end
-------------------------------------------------------------------------------------------------------------------
-- General hooks for other events.
-------------------------------------------------------------------------------------------------------------------
-- Called when the player's status changes.
function job_status_change(newStatus, oldStatus, eventArgs)
if newStatus == "Engaged" then
--if state.Buff['Last Resort'] then
-- send_command('@wait 1.0;cancel hasso')
--end
-- handle weapon sets
if remaWeapons:contains(player.equipment.main) then
state.CombatWeapon:set(player.equipment.main)
end
-- if gsList:contains(player.equipment.main) then
-- state.CombatWeapon:set("GreatSword")
-- elseif scytheList:contains(player.equipment.main) then
-- state.CombatWeapon:set("Scythe")
-- elseif remaWeapons:contains(player.equipment.main) then
-- state.CombatWeapon:set(player.equipment.main)
-- else -- use regular set, which caters to Liberator
-- state.CombatWeapon:reset()
-- end
--elseif newStatus == 'Idle' then
-- determine_idle_group()
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 state.Buff[buff] ~= nil then
handle_equipping_gear(player.status)
end
if S{'haste', 'march', 'embrava', 'geo-haste', 'indi-haste', 'last resort'}:contains(buff:lower()) then
if (buffactive['Last Resort']) then
if (buffactive.embrava or buffactive.haste) and buffactive.march then
state.CombatForm:set("Haste")
if not midaction() then
handle_equipping_gear(player.status)
end
end
else
if state.CombatForm.current ~= 'DW' and state.CombatForm.current ~= 'SW' then
state.CombatForm:reset()
end
if not midaction() then
handle_equipping_gear(player.status)
end
end
end
-- Drain II/III HP Boost. Set SE to stay on.
if buff == "Max HP Boost" and state.SouleaterMode.value then
if gain or buffactive['Max HP Boost'] then
state.SouleaterMode:set(false)
else
state.SouleaterMode:set(true)
end
end
-- Make sure SE stays on for BW
if buff == 'Blood Weapon' and state.SouleaterMode.value then
if gain or buffactive['Blood Weapon'] then
state.SouleaterMode:set(false)
else
state.SouleaterMode:set(true)
end
end
-- AM custom groups
if buff:startswith('Aftermath') then
if player.equipment.main == 'Liberator' then
classes.CustomMeleeGroups:clear()
if (buff == "Aftermath: Lv.3" and gain) or buffactive['Aftermath: Lv.3'] then
classes.CustomMeleeGroups:append('AM3')
add_to_chat(8, '-------------Mythic AM3 UP-------------')
-- elseif (buff == "Aftermath: Lv.3" and not gain) then
-- add_to_chat(8, '-------------Mythic AM3 DOWN-------------')
end
if not midaction() then
handle_equipping_gear(player.status)
end
else
classes.CustomMeleeGroups:clear()
if buff == "Aftermath" and gain or buffactive.Aftermath then
classes.CustomMeleeGroups:append('AM')
end
if not midaction() then
handle_equipping_gear(player.status)
end
end
end
-- if buff == "Samurai Roll" then
-- classes.CustomRangedGroups:clear()
-- if (buff == "Samurai Roll" and gain) or buffactive['Samurai Roll'] then
-- classes.CustomRangedGroups:append('SamRoll')
-- end
-- end
--if buff == "Last Resort" then
-- if gain then
-- send_command('@wait 1.0;cancel hasso')
-- else
-- if not midaction() then
-- send_command('@wait 1.0;input /ja "Hasso" <me>')
-- end
-- end
--end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements self-commands.
-------------------------------------------------------------------------------------------------------------------
-- 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)
war_sj = player.sub_job == 'WAR' or false
get_combat_form()
get_combat_weapon()
update_melee_groups()
select_default_macro_book()
end
-- State buff checks that will equip buff gear and mark the event as handled.
function check_buff(buff_name, eventArgs)
if state.Buff[buff_name] then
equip(sets.buff[buff_name] or {})
if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
equip(sets.TreasureHunter)
end
eventArgs.handled = true
end
end
-- Check for various actions that we've specified in user code as being used with TH gear.
-- This will only ever be called if TreasureMode is not 'None'.
-- Category and Param are as specified in the action event packet.
--function th_action_check(category, param)
-- if category == 2 or -- any ranged attack
-- --category == 4 or -- any magic action
-- (category == 3 and param == 30) or -- Aeolian Edge
-- (category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
-- (category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
-- then
-- return true
-- end
--end
-- function get_custom_wsmode(spell, spellMap, default_wsmode)
-- if state.OffenseMode.current == 'Mid' then
-- if buffactive['Aftermath: Lv.3'] then
-- return 'AM3Mid'
-- end
-- elseif state.OffenseMode.current == 'Acc' then
-- if buffactive['Aftermath: Lv.3'] then
-- return 'AM3Acc'
-- end
-- else
-- if buffactive['Aftermath: Lv.3'] then
-- return 'AM3'
-- end
-- end
-- end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
function get_combat_form()
if S{'NIN', 'DNC'}:contains(player.sub_job) and swordList:contains(player.equipment.main) then
state.CombatForm:set("DW")
--elseif player.equipment.sub == '' or shields:contains(player.equipment.sub) then
elseif swordList:contains(player.equipment.main) then
state.CombatForm:set("SW")
elseif buffactive['Last Resort'] then
if (buffactive.embrava or buffactive.haste) and buffactive.march then
add_to_chat(8, '-------------Delay Capped-------------')
state.CombatForm:set("Haste")
else
state.CombatForm:reset()
end
else
state.CombatForm:reset()
end
end
function get_combat_weapon()
state.CombatWeapon:reset()
if remaWeapons:contains(player.equipment.main) then
state.CombatWeapon:set(player.equipment.main)
end
-- if remaWeapons:contains(player.equipment.main) then
-- state.CombatWeapon:set(player.equipment.main)
-- elseif gsList:contains(player.equipment.main) then
-- state.CombatWeapon:set("GreatSword")
-- elseif scytheList:contains(player.equipment.main) then
-- state.CombatWeapon:set("Scythe")
-- end
end
function aw_custom_aftermath_timers_precast(spell)
if spell.type == 'WeaponSkill' then
info.aftermath = {}
local mythic_ws = "Insurgency"
info.aftermath.weaponskill = mythic_ws
info.aftermath.duration = 0
info.aftermath.level = math.floor(player.tp / 1000)
if info.aftermath.level == 0 then
info.aftermath.level = 1
end
if spell.english == mythic_ws and player.equipment.main == 'Liberator' then
-- nothing can overwrite lvl 3
if buffactive['Aftermath: Lv.3'] then
return
end
-- only lvl 3 can overwrite lvl 2
if info.aftermath.level ~= 3 and buffactive['Aftermath: Lv.2'] then
return
end
if info.aftermath.level == 1 then
info.aftermath.duration = 90
elseif info.aftermath.level == 2 then
info.aftermath.duration = 120
else
info.aftermath.duration = 180
end
end
end
end
-- Call from job_aftercast() to create the custom aftermath timer.
function aw_custom_aftermath_timers_aftercast(spell)
if not spell.interrupted and spell.type == 'WeaponSkill' and
info.aftermath and info.aftermath.weaponskill == spell.english and info.aftermath.duration > 0 then
local aftermath_name = 'Aftermath: Lv.'..tostring(info.aftermath.level)
send_command('timers d "Aftermath: Lv.1"')
send_command('timers d "Aftermath: Lv.2"')
send_command('timers d "Aftermath: Lv.3"')
send_command('timers c "'..aftermath_name..'" '..tostring(info.aftermath.duration)..' down abilities/aftermath'..tostring(info.aftermath.level)..'.png')
info.aftermath = {}
end
end
function display_current_job_state(eventArgs)
local msg = ''
msg = msg .. 'Offense: '..state.OffenseMode.current
msg = msg .. ', Hybrid: '..state.HybridMode.current
if state.DefenseMode.value ~= 'None' then
local defMode = state[state.DefenseMode.value ..'DefenseMode'].current
msg = msg .. ', Defense: '..state.DefenseMode.value..' '..defMode
end
if state.CombatForm.current ~= '' then
msg = msg .. ', Form: ' .. state.CombatForm.current
end
if state.CombatWeapon.current ~= '' then
msg = msg .. ', Weapon: ' .. state.CombatWeapon.current
end
if state.CapacityMode.value then
msg = msg .. ', Capacity: ON, '
end
if state.SouleaterMode.value then
msg = msg .. ', SE Cancel, '
end
-- if state.LastResortMode.value then
-- msg = msg .. ', LR Defense, '
-- end
if state.PCTargetMode.value ~= 'default' then
msg = msg .. ', Target PC: '..state.PCTargetMode.value
end
if state.SelectNPCTargets.value then
msg = msg .. ', Target NPCs'
end
add_to_chat(123, msg)
eventArgs.handled = true
end
-- Set eventArgs.handled to true if we don't want the automatic display to be run.
-- Handle notifications of general user state change.
function job_state_change(stateField, newValue, oldValue)
end
-- Creating a custom spellMap, since Mote capitalized absorbs incorrectly
function job_get_spell_map(spell, default_spell_map)
if spell.skill == 'Dark Magic' and absorbs:contains(spell.english) then
return 'Absorb'
end
-- if spell.type == 'Trust' then
-- return 'Trust'
-- end
end
function select_earring()
if world.time >= (17*60) or world.time <= (7*60) then
return sets.Lugra
else
return sets.Brutal
end
end
function update_melee_groups()
classes.CustomMeleeGroups:clear()
-- mythic AM
if player.equipment.main == 'Liberator' then
if buffactive['Aftermath: Lv.3'] then
classes.CustomMeleeGroups:append('AM3')
end
else
-- relic AM
if buffactive['Aftermath'] then
classes.CustomMeleeGroups:append('AM')
end
-- if buffactive['Samurai Roll'] then
-- classes.CustomRangedGroups:append('SamRoll')
-- end
end
end
function select_default_macro_book()
-- Default macro set/book
-- set_macro_page(5, 4)
-- if player.sub_job == 'DNC' then
-- set_macro_page(8, 4)
if scytheList:contains(player.equipment.main) then
set_macro_page(9, 8)
elseif gsList:contains(player.equipment.main) then
set_macro_page(1, 8)
elseif player.sub_job == 'SAM' then
set_macro_page(2, 8)
elseif swordList:contains(player.equipment.main) then
set_macro_page(7, 8)
end
end your gearswap is Selindrile's base
https://github.com/Selindrile/GearSwap
By eeternal 2019-12-27 08:40:12
How's infernal scythe damage wise in Dynamis especially with x2 dark weather
Quetzalcoatl.Orestes
Serveur: Quetzalcoatl
Game: FFXI
Posts: 430
By Quetzalcoatl.Orestes 2019-12-27 08:47:18
can some one post a updated lua link please
Here's mine. I didn't create it, but I suppose I reconfigured it a bit, and it includes relatively updated gear. I forget who the original author was. NOTE: There are still some things I have yet to acquire, and some aspects of the lua that I haven't touched because I don't use them.
Code
--[[
=== Features ===
If you want auto Reive detection for Ygnas Resolve+1, and Gavialis Helm for some of your WS, then you will need my User-Globals.lua
Otherwise, you might be able to get away without it. (not tested)
If you don't use organizer, then remove the include('organizer-lib') in get_sets() and remove sets.Organizer
This lua has a few MODES you can toggle with hotkeys or macros, and there's a few situational RULES that activate without hotkeys
::MODES::
SouleaterMode
Status: OFF by default.
Hotkey: Toggle this with @F9 (window key + F9).
Macro: /console gs c togggle SouleaterMode
Notes: This mode makes it possible to use Souleater in situations where you would normally avoid using it. When SouleaterMode
is ON, Souleater will be canceled automatically after the first Weaponskill used. CAVEAT -. If Bloodweapon
is active, or if Drain's HP Boost buff is active, then Souleater will remain active until the next WS used after
either buff wears off.
CapacityMode
Status: OFF by default.
Hotkey: with ALT + =
Macro: /console cs c toggle CapacityMode
Notes: It will full-time whichever piece of gear you specify in sets.CapacityMantle
Extra Info: You can change the default (true|false) status of any MODE by changing their values in job_setup()
::RULES::
Gavialis helm
Status: enabled
Setting: set use_gavialis = true below in job_setup.
Notes: Gavialis Helm will automatically be used for all weaponskills on their respective days of the week. If you would like to
exclude a weapon skill, you must add it to wsList below. (found in job_setup) You also need my User-Globals.lua for this
to even work.
Ygna's Resolve +1
Status: enabled in Reive
Setting: n/a
Notes: Will automatically be used when you're in a reive. If you have my User-Globals.lua this will work
with all your jobs that use mote's includes. Not just this one!
Moonshade earring
Status: Not used for WS's at 3000 TP.
Setting: n/a
You can hit F12 to display custom MODE status as well as the default stuff.
Single handed weapons are handled in the sets.engaged.SW set. (sword + shield, etc.)
::NOTES::
My sets have a specific order, or they will not function correctly.
sets.engaged.[CombatForm][CombatWeapon][Offense or HybridMode][CustomMeleeGroups or CustomClass]
CombatForm = Haste, DW, SW
CombatWeapon = GreatSword, Scythe, Apocalypse, Ragnarok, Caladbolg, Liberator, Anguta
OffenseMode = Mid, Acc
HybridMode = PDT
CustomMeleeGroups = AM3, AM, Haste
CustomClass = OhShit
CombatForm Haste is used when Last Resort + Hasso AND either Haste, March, Indi-Haste Geo-Haste is on you.
CombatForm DW will activate with /dnc or /nin AND a weapon listed in drk_sub_weapons equipped offhand.
SW is active with an empty sub-slot, or a shield listed in the shields = S{} list.
CombatWeapon GreatSword will activate when you equip a GS listed in gsList in job_setup().
CombatWeapon Scythe will activate when you equip a Scythe listed in scytheList in job_setup().
Weapons that do not fall into these groups, or have sets by weapon name, will use default sets.engaged
most gear sets derrive themselves from sets.engaged, so try to keep it updated. It's much smarter to derrive sets than to
completely re-invent each gear set for every weapon. Let your gear inherit. Less code written means less errors.
CustomMeleeGroups AM3 will activate when Aftermath lvl 3 is up, and CustomMeleeGroups AM will activate when relic Aftermath is up.
There are no empy AM sets for now.
--]]
--
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
include('organizer-lib')
end
-- Setup vars that are user-independent.
function job_setup()
state.CapacityMode = M(false, 'Capacity Point Mantle')
include('Mote-TreasureHunter')
state.TreasureMode:set('Tag')
state.Buff.Souleater = buffactive.souleater or false
state.Buff['Last Resort'] = buffactive['Last Resort'] or false
-- Set the default to false if you'd rather SE always stay acitve
state.SouleaterMode = M(false, 'Soul Eater Mode')
-- state.LastResortMode = M(false, 'Last Resort Mode')
-- Use Gavialis helm?
use_gavialis = true
-- Weaponskills you do NOT want Gavialis helm used with (only considered if use_gavialis = true)
wsList = S{'Spiral Hell', 'Catastrophe', 'Torcleaver', 'Insurgency', 'Quietus', 'Cross Reaper'}
-- Greatswords you use.
gsList = S{'Malfeasance', 'Macbain', 'Nanadaka', 'Mekosuchus Blade', 'Ragnarok', 'Raetic Algol', 'Raetic Algol +1', 'Caladbolg', 'Montante +1', 'Albion' }
scytheList = S{'Liberator', 'Apocalypse', 'Anguta', 'Raetic Scythe', 'Deathbane', 'Twilight Scythe' }
remaWeapons = S{'Apocalypse', 'Anguta', 'Liberator', 'Caladbolg', 'Ragnarok'}
shields = S{'Rinda Shield'}
-- Mote has capitalization errors in the default Absorb mappings, so we use our own
absorbs = S{'Absorb-STR', 'Absorb-DEX', 'Absorb-VIT', 'Absorb-AGI', 'Absorb-INT', 'Absorb-MND', 'Absorb-CHR', 'Absorb-Attri', 'Absorb-ACC', 'Absorb-TP'}
-- Offhand weapons used to activate DW mode
swordList = S{"Sangarius", "Sangarius +1", "Usonmunku", "Perun +1", "Tanmogayi", "Naegling"}
get_combat_form()
get_combat_weapon()
update_melee_groups()
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','STP','DA')
state.WeaponskillMode:options('Normal', 'Mid', 'Acc')
state.CastingMode:options('Normal', 'Acc')
state.IdleMode:options('Town', 'Normal', 'Regen', 'Refresh', 'Weak')
state.RestingMode:options('Normal')
state.PhysicalDefenseMode:options('PDT', 'Reraise')
state.MagicalDefenseMode:options('MDT')
state.HybridMode:options('Normal', 'PDT')
war_sj = player.sub_job == 'WAR' or false
-- Additional local binds
send_command('bind ^= gs c cycle treasuremode')
send_command('bind != gs c toggle CapacityMode')
send_command('bind @f9 gs c toggle SouleaterMode')
send_command('bind !- gs equip sets.crafting')
send_command('bind f1 gs c cycle OffenseMode')
send_command('bind f10 gs c cycle PhysicalDefenseMode')
send_command('bind f11 gs c cycle MagicalDefenseMode')
send_command('bind f2 gs c cycle IdleMode')
--send_command('bind ^` gs c toggle LastResortMode')
select_default_macro_book()
end
-- Called when this job file is unloaded (eg: job change)
function file_unload()
send_command('unbind ^`')
send_command('unbind !=')
send_command('unbind ^[')
send_command('unbind ![')
send_command('unbind @f9')
send_command('unbind f1')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Start defining the sets
--------------------------------------
-- Augmented gear
Niht = {name="Niht Mantle", augments={'Attack+10','Dark magic skill +8','"Drain" and "Aspir" potency +25'}}
Ankou = {}
Ankou.FC = { name="Ankou's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+9','"Fast Cast"+10','Spell interruption rate down-4%',}}
Ankou.STP = { name="Ankou's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+5','"Store TP"+10','Damage taken-5%',}}
Ankou.DA = { name="Ankou's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+2','"Dbl.Atk."+10',}}
Ankou.WSD = { name="Ankou's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%','Damage taken-5%',}}
Ankou.VIT = { name="Ankou's Mantle", augments={'VIT+1', 'Haste +10%',}}
Ankou.INT = { name="Ankou's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Mag. Acc.+10','"Fast Cast"+10','Spell interruption rate down-10%',}}
Odyssean = {}
Odyssean.Head = { name="Odyssean Helm", augments={'"Mag.Atk.Bns."+12','Pet: Crit.hit rate +4','Chance of successful block +4','Mag. Acc.+19 "Mag.Atk.Bns."+19',}}
Odyssean.Body = { name="Odyss. Chestplate", augments={'"Mag.Atk.Bns."+24','"Fast Cast"+4','STR+1','Accuracy+13',}}
Odyssean.Hands = { name="Odyssean Gauntlets", augments={'"Dbl.Atk."+2','INT+13','Accuracy+12 Attack+12','Mag. Acc.+17 "Mag.Atk.Bns."+17',}}
Odyssean.Legs = { name="Odyssean Cuisses", augments={'INT+2','Potency of "Cure" effect received+4%','Accuracy+17 Attack+17','Mag. Acc.+17 "Mag.Atk.Bns."+17',}}
Odyssean.Feet = { name="Odyssean Greaves", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','AGI+7','"Mag.Atk.Bns."+3',}}
sets.TreasureHunter = {waist="Chaac Belt" }
sets.Organizer = {}
sets.precast.JA['Diabolic Eye'] = {hands="Fallen's Finger Gauntlets +3"}
sets.precast.JA['Nether Void'] = {legs="Heathen's Flanchard +1"}
sets.precast.JA['Dark Seal'] = {head="Fallen's burgeonet +3"}
sets.precast.JA['Souleater'] = {head="Ignominy burgeonet +3"}
sets.precast.JA['Weapon Bash'] = {hands="Ignominy Gauntlets +2",left_ring="Slayer's Ring"} --Skillchain Property
sets.precast.JA['Blood Weapon'] = {body="Fallen's Cuirass +3"}
sets.precast.JA['Last Resort'] = {feet="Fallen's Sollerets +3"}
sets.WSDayBonus = { head="Gavialis Helm" }
sets.WSBack = Ankou.WSD
-- Earring considerations, given Lugra's day/night stats
sets.BrutalLugra = { ear1="Brutal Earring", ear2="Lugra Earring" }
sets.IshvaraLugra = { ear1="Ishvara Earring", ear2="Lugra Earring" }
sets.Lugra = { ear1="Lugra Earring" }
sets.Brutal = { ear1="Brutal Earring" }
sets.Ishvara = { ear1="Ishvara Earring" }
-- Waltz set (chr and vit)
-- sets.precast.Waltz = {}
-- Fast cast sets for spells
sets.precast.FC = {
ammo="Impatiens",
head={ name="Carmine Mask", augments={'Accuracy+10','DEX+10','MND+15',}},
body={ name="Fall. Cuirass +3", augments={'Enhances "Blood Weapon" effect',}},
hands={ name="Leyline Gloves", augments={'Accuracy+15','Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+3',}},
legs="Arjuna Breeches",
feet={ name="Carmine Greaves +1", augments={'MP+80','INT+12','MND+12',}},
neck="Erra Pendant",
waist="Austerity Belt +1",
back=Ankou.INT,
}
sets.precast.FC['Elemental Magic'] = sets.precast.FC
sets.precast.FC['Enfeebling Magic'] = sets.precast.FC
sets.precast.FC['Dark Magic'] = set_combine(sets.precast.FC, {head={ name="Fall. Burgeonet +3", augments={'Enhances "Dark Seal" effect',}}})
-- Midcast Sets
sets.midcast.FastRecast = sets.precast.FC
-- sets.midcast.Trust = {
-- head={ name="Carmine Mask", augments={'Accuracy+10','DEX+10','MND+15',}},
-- hands="Leyline Gloves",
-- body="Fallen's Cuirass +3",
-- legs="Arjuna Breeches",
-- feet="Carmine Greaves +1"
-- }
sets.midcast["Apururu (UC)"] = set_combine(sets.midcast.Trust, {
body="Apururu Unity shirt",
})
-- Specific spells
sets.midcast.Utsusemi = sets.precast.FC
sets.midcast['Dark Magic'] = {
ammo="Strobilus",
head="Pixi Hairpin +1",
body={ name="Fall. Cuirass +3", augments={'Enhances "Blood Weapon" effect',}},
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}},
legs={ name="Fall. Flanchard +3", augments={'Enhances "Muted Soul" effect',}},
feet="Ratri Sollerets +1",
neck="Erra Pendant",
waist="Austerity Belt +1",
left_ear="Friomisi Earring",
right_ear="Crematio Earring",
left_ring="Archon Ring",
right_ring="Evanescence Ring",
back=Ankou.INT,
}
sets.midcast.Endark = sets.midcast['Dark Magic']
sets.midcast['Dark Magic'].Acc = set_combine(sets.midcast['Dark Magic'], {
head="Ratri Sallet +1", -- 45 macc
hands="Ratri gadlings +1" -- 44 macc
})
sets.midcast['Enfeebling Magic'] = {
ammo="Strobilus",
head={ name="Fall. Burgeonet +3", augments={'Enhances "Dark Seal" effect',}},
neck="Erra Pendant", -- Dark Magic Skill 10 + 17 macc
body="Ignominy Cuirass +3",
hands="Ratri gadlings +1", -- 44 macc
ring1="Stikini Ring +1", -- 11 macc
ring2="Kishar Ring",
waist="Austerity Belt +1",
legs="Fallen's Flanchard +3", -- Dark Magic Skill 18 + 39macc
back=Ankou.INT,
feet="Flamma Gambieras +2"
}
sets.midcast['Elemental Magic'] = {
ammo="Strobilus",
head={ name="Odyssean Helm", augments={'"Mag.Atk.Bns."+12','Pet: Crit.hit rate +4','Chance of successful block +4','Mag. Acc.+19 "Mag.Atk.Bns."+19',}},
neck="Eddy Necklace", -- macc 5, 11 matk
ear1="Friomisi Earring", -- 10 matk
right_ear="Crematio Earring", -- matk 6, mdmg +6
body={ name="Fall. Cuirass +3", augments={'Enhances "Blood Weapon" effect',}}, -- macc 40, matk 60
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}}, -- macc 38, matk 62
ring1="Fenrir Ring +1", -- macc/matk 3, mdmg 5
ring2="Fenrir Ring +1", -- macc/matk 3, mdmg 5
waist="Austerity Belt +1", -- macc/matk 7
legs={ name="Odyssean Cuisses", augments={'INT+2','Potency of "Cure" effect received+4%','Accuracy+17 Attack+17','Mag. Acc.+17 "Mag.Atk.Bns."+17',}},
back=Ankou.INT, -- macc 29, mdmg 20
feet="Heathen's Sollerets +1" -- macc/matk 20, Occult Acumen 30
}
-- Mix of HP boost, -Spell interruption%, and Dark Skill
sets.midcast['Dread Spikes'] = set_combine(sets.midcast['Dark Magic'], {
ammo="Strobilus",
head="Ignominy Burgonet +3", -- 17
left_ear="Friomisi Earring",
right_ear="Crematio Earring",
body="Heathen's Cuirass +1",
hands="Fallen's Finger Gauntlets +3",
back=Ankou.INT,
})
sets.midcast['Dread Spikes'].Acc = set_combine(sets.midcast['Dark Magic'], {
body="Heathen's Cuirass +1",
hands="Fallen's Finger Gauntlets +3"
})
-- Drain spells
sets.midcast.Drain = sets.midcast['Dark Magic']
sets.midcast.Aspir = sets.midcast.Drain
sets.midcast.Drain.Acc = set_combine(sets.midcast.Drain, {
hands="Leyline Gloves",
waist="Eschan Stone", -- macc/matk 7
})
sets.midcast.Aspir.Acc = sets.midcast.Drain.Acc
sets.midcast.Drain.OhShit = set_combine(sets.midcast.Drain, {
legs="Carmine Cuisses",
feet="Ratri Sollerets +1"
})
-- Absorbs
sets.midcast.Absorb = set_combine(sets.midcast['Dark Magic'], {
head="Ignominy Burgonet +3", -- Absorb duration 20
feet="Ratri Sollerets +1",
ring2="Kishar Ring",
back=Ankou.INT,
})
sets.midcast['Absorb-TP'] = set_combine(sets.midcast.Absorb, {
hands="Heathen's Gauntlets +1",
ring2="Kishar Ring",
})
sets.midcast['Absorb-TP'].Acc = set_combine(sets.midcast.Absorb.Acc, {
hands="Heathen's Gauntlets +1",
ring2="Kishar Ring",
})
sets.midcast.Absorb.Acc = set_combine(sets.midcast['Dark Magic'].Acc, {
head="Flamma Zucchetto +2", -- 44 macc
back=Ankou.INT,
hands="Ratri gadlings +1",
ring2="Kishar Ring",
})
-- Ranged for xbow
sets.precast.RA = {}
sets.midcast.RA = {}
-- WEAPONSKILL SETS
-- General sets
-- Balanced (Acc and WSD) WSD +74
sets.precast.WS = {
ammo="Knobkierrie", --WSD +6
head={ name="Fall. Burgeonet +3", augments={'Enhances "Dark Seal" effect',}},
body="Ignominy Cuirass +3", --WSD +10
hands="Ratri Gadlings +1", --WSD +8
legs={ name="Fall. Flanchard +3", augments={'Enhances "Muted Soul" effect',}}, --WSD +10
feet="Ratri Sollerets +1", --WSD +8
neck="Fotia Gorget", --WSA/WSD +10
waist="Fotia Belt", --WSA/WSD +10
left_ear="Telos Earring",
right_ear="Ishvara Earring", --WSD +2
left_ring="Chirich Ring",
right_ring="Ifrit Ring +1",
back=Ankou.WSD, -- WSD +10
}
-- CATASTROPHE
-- 40% STR/40% INT
-- +68% Catastrophe Damage
sets.precast.WS['Catasrophe'] = {
main="Apocalypse",
sub="Utu Grip",
ammo="Knobkierrie",
head="Ratri Sallet +1",
body="Ignominy Cuirass +3",
hands="Rat. Gadlings +1",
legs={ name="Fall. Flanchard +3", augments={'Enhances "Muted Soul" effect',}},
feet="Rat. Sollerets +1",
neck="Abyssal Beads +2",
waist="Fotia Belt",
left_ear="Ishvara Earring",
right_ear="Lugra Earring +1",
left_ring="Niqmaddu Ring",
right_ring="Ifrit Ring +1",
back=Ankou.WSD,
}
-- RESOLUTION
-- 86-100% STR
sets.precast.WS.Resolution = sets.precast.WS
sets.precast.WS.Resolution.Acc = sets.precast.WS
-- TORCLEAVER
-- VIT 80%
sets.precast.WS.Torcleaver = sets.precast.WS
sets.precast.WS.Torcleaver.Mid = set_combine(sets.precast.WS.Mid, {
neck="Abyssal Bead Necklace +2",
})
sets.precast.WS.Torcleaver.Acc = sets.precast.WS.Torcleaver.Mid
-- INSURGENCY
-- 20% STR / 20% INT
-- Base set only used at 3000TP to put AM3 up
sets.precast.WS.Insurgency = set_combine(sets.precast.WS, {head="Ratri Sallet +1"})
-- CROSS REAPER
-- 60% STR / 60% MND
sets.precast.WS['Cross Reaper'] = sets.precast.WS
-- ENTROPY
-- 86-100% INT
sets.precast.WS['Entropy'] = {
ammo="Knobkierrie",
head={ name="Odyssean Helm", augments={'"Mag.Atk.Bns."+12','Pet: Crit.hit rate +4','Chance of successful block +4','Mag. Acc.+19 "Mag.Atk.Bns."+19',}},
body={ name="Fall. Cuirass +3", augments={'Enhances "Blood Weapon" effect',}},
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}},
legs={ name="Fall. Flanchard +3", augments={'Enhances "Muted Soul" effect',}},
feet="Ratri Sollerets +1",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Friomisi Earring",
right_ear="Ishvara Earring",
left_ring="Fenrir Ring +1",
right_ring="Stikini Ring +1",
back=Ankou.WSD,
}
-- Quietus
-- 60% STR / MND
sets.precast.WS['Quietus'] = sets.precast.WS['Catastrophe']
-- SPIRAL HELL
-- 50% STR / 50% INT
sets.precast.WS['Spiral Hell'] = sets.precast.WS['Catastrophe']
-- SHADOW OF DEATH
-- 40% STR 40% INT - Darkness Elemental
sets.precast.WS['Shadow of Death'] = set_combine(sets.precast.WS['Entropy'], {
head="Pixie Hairpin +1",
neck="Eddy Necklace",
})
sets.precast.WS['Shadow of Death'].Mid = set_combine(sets.precast.WS['Shadow of Death'], sets.precast.WS.Mid, {
})
sets.precast.WS['Shadow of Death'].Acc = set_combine(sets.precast.WS['Shadow of Death'], sets.precast.WS.Acc, {
})
-- DARK HARVEST
-- 40% STR 40% INT - Darkness Elemental
sets.precast.WS['Dark Harvest'] = sets.precast.WS['Shadow of Death']
sets.precast.WS['Dark Harvest'].Mid = set_combine(sets.precast.WS['Shadow of Death'], {head="Ignominy Burgeonet +3", feet="Heathen's Sollerets +1"})
sets.precast.WS['Dark Harvest'].Acc = set_combine(sets.precast.WS['Shadow of Death'], {head="Ignominy Burgeonet +3", feet="Heathen's Sollerets +1"})
-- Sword WS's
-- SANGUINE BLADE
-- 50% MND / 50% STR Darkness Elemental
sets.precast.WS['Sanguine Blade'] = set_combine(sets.precast.WS, {
head="Pixie Hairpin +1",
neck="Eddy Necklace",
ear1="Friomisi Earring",
body="Fallen's Cuirass +3",
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}},
back=Ankou.WSD,
feet="Heathen's Sollerets +1"
})
sets.precast.WS['Sanguine Blade'].Mid = set_combine(sets.precast.WS['Sanguine Blade'], sets.precast.WS.Mid)
sets.precast.WS['Sanguine Blade'].Acc = set_combine(sets.precast.WS['Sanguine Blade'], sets.precast.WS.Acc)
-- REQUISCAT
-- 73% MND - breath damage
sets.precast.WS.Requiescat = set_combine(sets.precast.WS, {
head="Flamma Zucchetto +2",
neck="Abyssal Bead Necklace +2",
body="Ignominy Cuirass +3",
hands={ name="Fall. Fin. Gaunt. +3", augments={'Enhances "Diabolic Eye" effect',}},
waist="Fotia Belt",
})
sets.precast.WS.Requiescat.Mid = set_combine(sets.precast.WS.Requiscat, sets.precast.WS.Mid)
sets.precast.WS.Requiescat.Acc = set_combine(sets.precast.WS.Requiscat, sets.precast.WS.Acc)
-- Idle sets
sets.idle.Town = {
ranged="Mengado",
head="Hjarrandi Helm",
neck="Sanctity Necklace",
body="Hjarrandi Breast.",
hands="Sulevia's Gauntlets +2",
left_ear="Telos Earring",
right_ear="Cessance Earring",
ring1="Chirich Ring +1",
ring2="Stikini Ring +1",
waist="Ioskeha Belt +1",
legs="Carmine Cuisses",
feet={ name="Fall. Sollerets +3", augments={'Enhances "Desperate Blows" effect',}},
back=Ankou.STP,
}
sets.idle.Field = {
head="Hjarrandi Helm", -- Haste 3%
body="Hjarrandi Breast.", -- Haste 1%
hands="Sulev. Gauntlets +2", -- Haste 3%
legs="Carmine Cuisses",
feet={ name="Fall. Sollerets +3", augments={'Enhances "Desperate Blows" effect',}},
neck="Sanctity Necklace",
waist="Flume Belt +1",
left_ear="Telos Earring",
right_ear="Cessance Earring",
left_ring="Stikini Ring +1",
right_ring="Chirich Ring +1",
back=Ankou.VIT
}
sets.idle.Regen = set_combine(sets.idle.Field, {
neck="Sanctity Necklace",
body="Lugra Cloak +1",
ring1="Chirich Ring +1",
ring2="Chirish Ring +1"
})
sets.idle.Refresh = set_combine(sets.idle.Regen, {
neck="Bale Choker",
left_ring="Stikini Ring +1",
right_ring="Stikini Ring +1"
})
sets.idle.Weak = set_combine(sets.defense.PDT, sets.Reraise)
-- Defense sets
sets.defense.PDT = {
ammo="Brigantia Pebble",
head="Hjarrandi Helm", -- Haste 3%
body="Hjarrandi Breast.", -- Haste 1%
hands="Sulev. Gauntlets +2", -- Haste 3%
legs="Sulev. Cuisses +2", -- Haste 2%
feet="Sulev. Leggings +2", -- Haste 1%
neck="Loricate Torque +1",
waist="Flume Belt +1",
left_ear="Thureous Earring",
right_ear="Impreg. Earring",
left_ring="Defending Ring",
right_ring="Paguroidea Ring",
back=Ankou.WSD,
}
sets.defense.Reraise = set_combine(sets.idle.Weak, {head="Twilight Helm",body="Twilight Mail"})
sets.defense.MDT = set_combine(sets.defense.PDT, {ammo="Vanir Battery",waist="Asklepian Belt"})
sets.Kiting = {
legs="Carmine Cuisses",
}
sets.Reraise = {head="Twilight Helm",body="Twilight Mail"}
-- Base set (global catch-all set)
sets.engaged = {
ammo="Ginsen",
head="Hjarrandi Helm",
body="Hjarrandi Breast.",
hands="Sulev. Gauntlets +2",
legs="Sulev. Cuisses +2",
feet="Sulev. Leggings +2",
neck="Abyssal Beads +2",
waist="Ioskeha Belt +1",
left_ear="Telos Earring",
right_ear="Cessance Earring",
left_ring="Chirich Ring +1",
right_ring={name="Chirich Ring +1", bag="Wardrobe 3", priority=1},
back=Ankou.STP,
}
sets.engaged.STP = {
ammo="Ginsen",
head="Sulevia's Mask +2",
body="Hjarrandi Breast.",
hands="Flam. Manopolas +2",
legs="Flamma Dirs +2",
feet="Flam. Gambieras +2",
neck="Abyssal Beads +2",
waist="Kentarch Belt +1",
left_ear="Telos Earring",
right_ear="Cessance Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back=Ankou.STP,
}
sets.engaged.DA = {
ammo="Ginsen",
head="Hjarrandi Helm",
body="Hjarrandi Breast.",
hands="Sulev. Gauntlets +2",
legs="Ig. Flanchard +2",
feet="Flam. Gambieras +2",
neck="Abyssal Beads +2",
waist="Ioskeha Belt +1",
left_ear="Brutal Earring",
right_ear="Cessance Earring",
left_ring="Chirich Ring +1",
right_ring="Chirich Ring +1",
back=Ankou.DA,
}
-- dual wield
sets.engaged.DW = set_combine(sets.engaged, {
waist="Patentia Sash",
legs="Carmine Cuisses",
})
sets.engaged.DW.Mid = set_combine(sets.engaged.DW, {
neck="Abyssal Bead Necklace +2",
})
-- single wield (sword + shield possibly)
sets.engaged.SW = {}
sets.engaged.SW.Mid = set_combine(sets.engaged.Mid, {})
sets.engaged.SW.Acc = set_combine(sets.engaged.Acc, {})
sets.engaged.Reraise = set_combine(sets.engaged, {
head="Twilight Helm",
neck="Loricate Torque +1",
body="Twilight Mail"
})
sets.buff.Souleater = {
head="Ignominy Burgonet +3",
--body="Ratri Breastplate",
}
sets.buff['Last Resort'] = {
feet="Fallen's Sollerets +3"
}
end
function job_pretarget(spell, action, spellMap, eventArgs)
if spell.type:endswith('Magic') and buffactive.silence then
eventArgs.cancel = true
send_command('input /item "Echo Drops" <me>')
end
end
function job_pretarget(spell, action, spellMap, eventArgs)
if spell.type:endswith('Magic') and buffactive.cursed then
eventArgs.cancel = true
send_command('input /item "Holy Water" <me>')
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)
aw_custom_aftermath_timers_precast(spell)
end
function job_post_precast(spell, action, spellMap, eventArgs)
local recast = windower.ffxi.get_ability_recasts()
-- Make sure abilities using head gear don't swap
if spell.type:lower() == 'weaponskill' then
-- handle Gavialis Helm
-- if use_gavialis then
-- if is_sc_element_today(spell) then
-- if wsList:contains(spell.english) then
-- -- do nothing
-- else
-- equip(sets.WSDayBonus)
-- end
-- end
-- end
-- CP mantle must be worn when a mob dies, so make sure it's equipped for WS.
if state.CapacityMode.value then
equip(sets.CapacityMantle)
end
-- if spell.english == 'Entropy' and recast[95] == 0 then
-- eventArgs.cancel = true
-- send_command('@wait 4.0;input /ja "Consume Mana" <me>')
-- --windower.chat.input:schedule(1, '/ws "Entropy" <t>')
-- return
-- end
if player.tp > 2999 then
if wsList:contains(spell.english) then
equip(sets.IshvaraLugra)
else
equip(sets.BrutalLugra)
end
else -- use Lugra + moonshade
if world.time >= (17*60) or world.time <= (7*60) then
equip(sets.Lugra)
else
if wsList:contains(spell.english) then
equip(sets.Ishvara)
else
equip(sets.Brutal)
end
end
end
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)
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.english:startswith('Drain') then
if player.status == 'Engaged' and state.CastingMode.current == 'Normal' and player.hpp < 70 then
classes.CustomClass = 'OhShit'
end
end
if (state.HybridMode.current == 'PDT' and state.PhysicalDefenseMode.current == 'Reraise') then
equip(sets.Reraise)
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)
aw_custom_aftermath_timers_aftercast(spell)
if state.Buff[spell.english] ~= nil then
state.Buff[spell.english] = not spell.interrupted or buffactive[spell.english]
end
end
function job_post_aftercast(spell, action, spellMap, eventArgs)
if spell.type == 'WeaponSkill' then
if state.Buff.Souleater and state.SouleaterMode.value then
send_command('@wait 1.0;cancel souleater')
--enable("head")
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- Customization hooks for idle and melee sets, after they've been automatically constructed.
-------------------------------------------------------------------------------------------------------------------
-- Called before the Include starts constructing melee/idle/resting sets.
-- Can customize state or custom melee class values at this point.
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_handle_equipping_gear(status, eventArgs)
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if player.mpp < 70 then
idleSet = set_combine(idleSet, sets.idle.Refresh)
end
if player.hpp < 70 then
idleSet = set_combine(idleSet, sets.idle.Regen)
end
if state.IdleMode.current == 'Sphere' then
idleSet = set_combine(idleSet, sets.idle.Sphere)
end
if state.HybridMode.current == 'PDT' then
idleSet = set_combine(idleSet, sets.defense.PDT)
end
return idleSet
end
-- Modify the default melee set after it was constructed.
function customize_melee_set(meleeSet)
if state.TreasureMode.value == 'Fulltime' then
meleeSet = set_combine(meleeSet, sets.TreasureHunter)
end
if state.CapacityMode.value then
meleeSet = set_combine(meleeSet, sets.CapacityMantle)
end
if state.Buff['Souleater'] then
meleeSet = set_combine(meleeSet, sets.buff.Souleater)
end
--meleeSet = set_combine(meleeSet, select_earring())
return meleeSet
end
-------------------------------------------------------------------------------------------------------------------
-- General hooks for other events.
-------------------------------------------------------------------------------------------------------------------
-- Called when the player's status changes.
function job_status_change(newStatus, oldStatus, eventArgs)
if newStatus == "Engaged" then
--if state.Buff['Last Resort'] then
-- send_command('@wait 1.0;cancel hasso')
--end
-- handle weapon sets
if remaWeapons:contains(player.equipment.main) then
state.CombatWeapon:set(player.equipment.main)
end
-- if gsList:contains(player.equipment.main) then
-- state.CombatWeapon:set("GreatSword")
-- elseif scytheList:contains(player.equipment.main) then
-- state.CombatWeapon:set("Scythe")
-- elseif remaWeapons:contains(player.equipment.main) then
-- state.CombatWeapon:set(player.equipment.main)
-- else -- use regular set, which caters to Liberator
-- state.CombatWeapon:reset()
-- end
--elseif newStatus == 'Idle' then
-- determine_idle_group()
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 state.Buff[buff] ~= nil then
handle_equipping_gear(player.status)
end
if S{'haste', 'march', 'embrava', 'geo-haste', 'indi-haste', 'last resort'}:contains(buff:lower()) then
if (buffactive['Last Resort']) then
if (buffactive.embrava or buffactive.haste) and buffactive.march then
state.CombatForm:set("Haste")
if not midaction() then
handle_equipping_gear(player.status)
end
end
else
if state.CombatForm.current ~= 'DW' and state.CombatForm.current ~= 'SW' then
state.CombatForm:reset()
end
if not midaction() then
handle_equipping_gear(player.status)
end
end
end
-- Drain II/III HP Boost. Set SE to stay on.
if buff == "Max HP Boost" and state.SouleaterMode.value then
if gain or buffactive['Max HP Boost'] then
state.SouleaterMode:set(false)
else
state.SouleaterMode:set(true)
end
end
-- Make sure SE stays on for BW
if buff == 'Blood Weapon' and state.SouleaterMode.value then
if gain or buffactive['Blood Weapon'] then
state.SouleaterMode:set(false)
else
state.SouleaterMode:set(true)
end
end
-- AM custom groups
if buff:startswith('Aftermath') then
if player.equipment.main == 'Liberator' then
classes.CustomMeleeGroups:clear()
if (buff == "Aftermath: Lv.3" and gain) or buffactive['Aftermath: Lv.3'] then
classes.CustomMeleeGroups:append('AM3')
add_to_chat(8, '-------------Mythic AM3 UP-------------')
-- elseif (buff == "Aftermath: Lv.3" and not gain) then
-- add_to_chat(8, '-------------Mythic AM3 DOWN-------------')
end
if not midaction() then
handle_equipping_gear(player.status)
end
else
classes.CustomMeleeGroups:clear()
if buff == "Aftermath" and gain or buffactive.Aftermath then
classes.CustomMeleeGroups:append('AM')
end
if not midaction() then
handle_equipping_gear(player.status)
end
end
end
-- if buff == "Samurai Roll" then
-- classes.CustomRangedGroups:clear()
-- if (buff == "Samurai Roll" and gain) or buffactive['Samurai Roll'] then
-- classes.CustomRangedGroups:append('SamRoll')
-- end
-- end
--if buff == "Last Resort" then
-- if gain then
-- send_command('@wait 1.0;cancel hasso')
-- else
-- if not midaction() then
-- send_command('@wait 1.0;input /ja "Hasso" <me>')
-- end
-- end
--end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements self-commands.
-------------------------------------------------------------------------------------------------------------------
-- 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)
war_sj = player.sub_job == 'WAR' or false
get_combat_form()
get_combat_weapon()
update_melee_groups()
select_default_macro_book()
end
-- State buff checks that will equip buff gear and mark the event as handled.
function check_buff(buff_name, eventArgs)
if state.Buff[buff_name] then
equip(sets.buff[buff_name] or {})
if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
equip(sets.TreasureHunter)
end
eventArgs.handled = true
end
end
-- Check for various actions that we've specified in user code as being used with TH gear.
-- This will only ever be called if TreasureMode is not 'None'.
-- Category and Param are as specified in the action event packet.
--function th_action_check(category, param)
-- if category == 2 or -- any ranged attack
-- --category == 4 or -- any magic action
-- (category == 3 and param == 30) or -- Aeolian Edge
-- (category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
-- (category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
-- then
-- return true
-- end
--end
-- function get_custom_wsmode(spell, spellMap, default_wsmode)
-- if state.OffenseMode.current == 'Mid' then
-- if buffactive['Aftermath: Lv.3'] then
-- return 'AM3Mid'
-- end
-- elseif state.OffenseMode.current == 'Acc' then
-- if buffactive['Aftermath: Lv.3'] then
-- return 'AM3Acc'
-- end
-- else
-- if buffactive['Aftermath: Lv.3'] then
-- return 'AM3'
-- end
-- end
-- end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
function get_combat_form()
if S{'NIN', 'DNC'}:contains(player.sub_job) and swordList:contains(player.equipment.main) then
state.CombatForm:set("DW")
--elseif player.equipment.sub == '' or shields:contains(player.equipment.sub) then
elseif swordList:contains(player.equipment.main) then
state.CombatForm:set("SW")
elseif buffactive['Last Resort'] then
if (buffactive.embrava or buffactive.haste) and buffactive.march then
add_to_chat(8, '-------------Delay Capped-------------')
state.CombatForm:set("Haste")
else
state.CombatForm:reset()
end
else
state.CombatForm:reset()
end
end
function get_combat_weapon()
state.CombatWeapon:reset()
if remaWeapons:contains(player.equipment.main) then
state.CombatWeapon:set(player.equipment.main)
end
-- if remaWeapons:contains(player.equipment.main) then
-- state.CombatWeapon:set(player.equipment.main)
-- elseif gsList:contains(player.equipment.main) then
-- state.CombatWeapon:set("GreatSword")
-- elseif scytheList:contains(player.equipment.main) then
-- state.CombatWeapon:set("Scythe")
-- end
end
function aw_custom_aftermath_timers_precast(spell)
if spell.type == 'WeaponSkill' then
info.aftermath = {}
local mythic_ws = "Insurgency"
info.aftermath.weaponskill = mythic_ws
info.aftermath.duration = 0
info.aftermath.level = math.floor(player.tp / 1000)
if info.aftermath.level == 0 then
info.aftermath.level = 1
end
if spell.english == mythic_ws and player.equipment.main == 'Liberator' then
-- nothing can overwrite lvl 3
if buffactive['Aftermath: Lv.3'] then
return
end
-- only lvl 3 can overwrite lvl 2
if info.aftermath.level ~= 3 and buffactive['Aftermath: Lv.2'] then
return
end
if info.aftermath.level == 1 then
info.aftermath.duration = 90
elseif info.aftermath.level == 2 then
info.aftermath.duration = 120
else
info.aftermath.duration = 180
end
end
end
end
-- Call from job_aftercast() to create the custom aftermath timer.
function aw_custom_aftermath_timers_aftercast(spell)
if not spell.interrupted and spell.type == 'WeaponSkill' and
info.aftermath and info.aftermath.weaponskill == spell.english and info.aftermath.duration > 0 then
local aftermath_name = 'Aftermath: Lv.'..tostring(info.aftermath.level)
send_command('timers d "Aftermath: Lv.1"')
send_command('timers d "Aftermath: Lv.2"')
send_command('timers d "Aftermath: Lv.3"')
send_command('timers c "'..aftermath_name..'" '..tostring(info.aftermath.duration)..' down abilities/aftermath'..tostring(info.aftermath.level)..'.png')
info.aftermath = {}
end
end
function display_current_job_state(eventArgs)
local msg = ''
msg = msg .. 'Offense: '..state.OffenseMode.current
msg = msg .. ', Hybrid: '..state.HybridMode.current
if state.DefenseMode.value ~= 'None' then
local defMode = state[state.DefenseMode.value ..'DefenseMode'].current
msg = msg .. ', Defense: '..state.DefenseMode.value..' '..defMode
end
if state.CombatForm.current ~= '' then
msg = msg .. ', Form: ' .. state.CombatForm.current
end
if state.CombatWeapon.current ~= '' then
msg = msg .. ', Weapon: ' .. state.CombatWeapon.current
end
if state.CapacityMode.value then
msg = msg .. ', Capacity: ON, '
end
if state.SouleaterMode.value then
msg = msg .. ', SE Cancel, '
end
-- if state.LastResortMode.value then
-- msg = msg .. ', LR Defense, '
-- end
if state.PCTargetMode.value ~= 'default' then
msg = msg .. ', Target PC: '..state.PCTargetMode.value
end
if state.SelectNPCTargets.value then
msg = msg .. ', Target NPCs'
end
add_to_chat(123, msg)
eventArgs.handled = true
end
-- Set eventArgs.handled to true if we don't want the automatic display to be run.
-- Handle notifications of general user state change.
function job_state_change(stateField, newValue, oldValue)
end
-- Creating a custom spellMap, since Mote capitalized absorbs incorrectly
function job_get_spell_map(spell, default_spell_map)
if spell.skill == 'Dark Magic' and absorbs:contains(spell.english) then
return 'Absorb'
end
-- if spell.type == 'Trust' then
-- return 'Trust'
-- end
end
function select_earring()
if world.time >= (17*60) or world.time <= (7*60) then
return sets.Lugra
else
return sets.Brutal
end
end
function update_melee_groups()
classes.CustomMeleeGroups:clear()
-- mythic AM
if player.equipment.main == 'Liberator' then
if buffactive['Aftermath: Lv.3'] then
classes.CustomMeleeGroups:append('AM3')
end
else
-- relic AM
if buffactive['Aftermath'] then
classes.CustomMeleeGroups:append('AM')
end
-- if buffactive['Samurai Roll'] then
-- classes.CustomRangedGroups:append('SamRoll')
-- end
end
end
function select_default_macro_book()
-- Default macro set/book
-- set_macro_page(5, 4)
-- if player.sub_job == 'DNC' then
-- set_macro_page(8, 4)
if scytheList:contains(player.equipment.main) then
set_macro_page(9, 8)
elseif gsList:contains(player.equipment.main) then
set_macro_page(1, 8)
elseif player.sub_job == 'SAM' then
set_macro_page(2, 8)
elseif swordList:contains(player.equipment.main) then
set_macro_page(7, 8)
end
end your gearswap is Selindrile's base
https://github.com/Selindrile/GearSwapNah, that’s mine. Been around a few years before sels.
The base is just vanilla mote, which Selindrile uses as well.
By Galkapryme 2019-12-27 09:54:26
Whichever of you made it...I appreciate it.
By Galkapryme 2019-12-27 09:57:24
Current "balanced" melee set (not particularly STP, nor DA, nor Acc, nor Attk).
Apoc is R15, Abbysal beads +2 is R25, Cape is STR, Acc/Attk, STP, and DT-5%.
Overall, STP = 50, DA = 25, TA = 4
ItemSet 370422
I'll post my straight STP and DA sets later.
By Galkapryme 2019-12-27 10:20:32
STP set is 81 ~ 85. DA set is 50. The lower DEF and attack power are why I rarely use either of these sets.
ItemSet 370423
ItemSet 370424
By Galkapryme 2019-12-27 10:21:34
I don't have Moonshade Earring yet, but other than that, if anyone can offer any suggestions on strengthening any of these sets, I'd appreciate it.
By volkom 2019-12-27 11:04:47
i feel like you could find something better for stp on legs/hands/head and that could free up your ring slots for things like a hetairoi ring or a Niqmaddu ring ~ also more haste would be good (not sure if you're taking the AM effect into consideration in your set tho...)
just my 2cents D:
Serveur: Bahamut
Game: FFXI
Posts: 1798
By Bahamut.Celebrindal 2019-12-27 11:11:57
using both Hjarrandi piece "usually" means needing to use a waist like Tempus Fugit to make up for the zero haste on either piece. One option if you want to keep your Ioskeha+1....go with Emicho+1 hands/body in your DA set. But yeah, you need to hit 25/26% haste for your DA set- your current sets hits....19%
Augmented Ody legs are an option for your STP legs.
Siren.Kyte
Serveur: Siren
Game: FFXI
Posts: 3332
By Siren.Kyte 2019-12-27 13:03:31
They're Apoc sets so they don't necessarily need to cap gear haste.
Serveur: Bahamut
Game: FFXI
Posts: 1798
By Bahamut.Celebrindal 2019-12-27 13:04:55
They're Apoc sets so they don't necessarily need to cap gear haste.
Ahh. As a DRK w/o Apoc (atm I only use DRK for large scale content where I'll be @magical haste cap and have healers) I never really contemplate that fact. Ty for correction.
By SimonSes 2019-12-27 13:52:19
They're Apoc sets so they don't necessarily need to cap gear haste.
Just to not make people confused. Apoc or not Apoc is only relevant with Last Resort down and with LR down you can only let yourself not to cap gear haste when you also have hasso and magic haste is capped.
Serveur: Asura
Game: FFXI
Posts: 3185
By Asura.Geriond 2019-12-27 13:57:57
That's not true; they changed Catastrophe to Gear haste several years back, so Apoc never needs to cap gear haste as long as they keep AM up.
Serveur: Sylph
Game: FFXI
Posts: 142
By Sylph.Wasenshi 2019-12-27 13:58:11
They're Apoc sets so they don't necessarily need to cap gear haste. AG Apoc is considered JA haste so you need gear haste still
Lakshmi.Buukki
Serveur: Lakshmi
Game: FFXI
By Lakshmi.Buukki 2019-12-27 14:06:18
That's not true; they changed Catastrophe to Gear haste several years back, so Apoc never needs to cap gear haste as long as they keep AM up.
The 119 III version is JA haste
By Taint 2019-12-27 14:18:13
That's not true; they changed Catastrophe to Gear haste several years back, so Apoc never needs to cap gear haste as long as they keep AM up.
It was always gear haste until AGIII. It’s one of the reasons 2008ish Apoc was broken.
Asura.Mims
Serveur: Asura
Game: FFXI
Posts: 256
By Asura.Mims 2019-12-27 15:53:48
How's infernal scythe damage wise in Dynamis especially with x2 dark weather Infernal Scythe is good for its attack down, but Shadow of Death scales better with TP and self-skillchains. Also Infernal Scythe has no dstat term, which hurts it in comparison.
In most situations there isn't much reason to use magic WS on Drk, but Dynamis San d'Oria is an exception. Even if your group is focusing on green eye pulls, blue eyes happen. For this reason, Liberator is king for wave 1 and 2. Insurgency for Green eyes, Shadow of Death for Blue eyes, and you can flexibly switch as needed while maintaining mythic AM3. TP overflow with Liberator is a big deal, and while Infernal might win when spammed at 1k TP on paper, when cracked out on buffs and battling dynamis lag Shadow of Death is always going to be at least as good, if not better. Trying to remember off the top of my head, I think Infernal was doing 13-17k per WS, where SoD was doing 13-38k with big variance for TP. That should be without malaise or magic buffs, and my gear may have improved since then. Also SoD to SoD will make Fragmentation, which is an added bonus. I suppose Anguta would probably be able to function similarly if you don't have Liberator.
This is my current Shadow of Death set:
ItemSet 370426
One question thats been bugging me for quite a while is how much Scythe Skill affects magic accuracy, and if there is a difference between skill+ on weapon and skill+ in other slots. I know it makes a difference, (See Leaden on Anarchy+2 vs any ilvl gun) but how much and in what way isn't clear.
Serveur: Bahamut
Game: FFXI
Posts: 1798
By Bahamut.Celebrindal 2019-12-27 16:50:51
One question thats been bugging me for quite a while is how much Scythe Skill affects magic accuracy, and if there is a difference between skill+ on weapon and skill+ in other slots. I know it makes a difference, (See Leaden on Anarchy+2 vs any ilvl gun) but how much and in what way isn't clear.
Your question got me wondering, and I found it easier to use my polished COR for some testing vs my fledgling DRK.
Leaden Salute, 3k TP, no buffs/trusts, using Chrono Bullets:
#1. Target: Sylvestre lv. 18 outside of Mhaura, using Fomalhaut: 35406.
#2. Target: Sylvestre lv. 18 outside Mhaura, using Ataktos (final form of Anarchy+2): 30106.
5300 dmg increase just due to increased base dmg from weapon (53 vs 174- my Foma is R13 not R15), added magic damage. Macc should not have been an issue here.
Leaden Salute, 3k TP, no buffs/trusts(this set will have vorseals active of course), using Chrono Bullets again:
#3. Target: Agitated Chapuli lv124 Reisenjima portal #3, using Fomalhaut: 39000.
#4. Target: Agitated Chapuli lv124 Reisenjima porta #3, using Ataktos: 35186
3814 damage difference.
So for unresisted damage, the gap exists but isn't nearly as much as one would expect. In a (VERY) quick test of general macc with the weapon, I did 10 1.2k~1.5k TP leadens w/ the Ataktos. Various mobs @ the #3 portal in Reisenjima, varying from lv123-125.
33,136
29,281
29,610
32,733
29,758
29,465
31,718
16,121
33,463
32,287
For this "test" I did a mild alteration of my standard Leaden Salute builds: No MAB weapons, no MAB bullet. So that means here was my following set:
RostamA-------RostamC------------(varied gun)----Chrono Bullet
Pixie+1-------JSE+1 neck----------Friomisi-------Ishvara
lanun+3 body--Carmine+1 hands-----Dingir---------Achon
JSE cape------sveltesse gouriz+1--herc trousers--lanun+3 feet
Notes:
-JSE+1 neck is 20/20.
-Ishvara is an auto swap when above 2749TP for Moonshade(TP bonus)
-Carmine +1 hands are Path D
-JSE cape is 30AGI,20racc,20ratk,10% WSD. No sep magical WS cape for COR, storage blahblah....
-herculean trousers: acc/atk+6, mab/macc+20, WSD+5%
So the set isn't incredibly loaded with macc, esp without using Living Bullets. the x2 Rostams do provide a total of +100 macc though, since the racc/acc/macc on them works in both hands, not just mainhand.
I'm now intrigued. I may toy with sets that drop me to just the threshold of being able to above 90% land an unresisted Leaden w/ Fomalhaut, then drop to Ataktos in the same set.
LONG STORY SHORT: My gut was that raw acc, be it from just acc or from +combat skill, doesn't affect magical Weaponskills accuracy in terms of damage. Since they cannot "miss" like a physical weaponskill, it relies on the macc for that aspect. It seems that is the case.
Ramuh.Austar
Serveur: Ramuh
Game: FFXI
Posts: 10481
By Ramuh.Austar 2019-12-27 17:05:06
Infernal Scythe is good for its attack down, but Shadow of Death scales better with TP and self-skillchains. Also Infernal Scythe has no dstat term, which hurts it in comparison. infernal is 3.5 at all values, shadow is 1 to 3. the dstat is also pretty unimportant. it's 32 damage after everything besides mab and affinities. mods alone from infernal will surpass that
Ramuh.Austar
Serveur: Ramuh
Game: FFXI
Posts: 10481
By Ramuh.Austar 2019-12-27 17:25:23
One question thats been bugging me for quite a while is how much Scythe Skill affects magic accuracy, and if there is a difference between skill+ on weapon and skill+ in other slots. I know it makes a difference, (See Leaden on Anarchy+2 vs any ilvl gun) but how much and in what way isn't clear. magic accuracy is affected by the skill of the weapon using the ws, but the skill on i level weapons don't add the combat skill, just the magic accuracy skill. pieces that actually show an increase in your skill screen should apply both, but we don't know how much m.acc you get from skill.
Asura.Mims
Serveur: Asura
Game: FFXI
Posts: 256
By Asura.Mims 2019-12-27 17:53:45
infernal is 3.5 at all values, shadow is 1 to 3. the dstat is also pretty unimportant. it's 32 damage after everything besides mab and affinities. mods alone from infernal will surpass that I'm aware thats what BG says for SoD, but I'm pretty sure that info is outdated. I don't think Shadow of Death has been retested after the june 2014 update. I should probably do some more testing in a bit, but in Dyna SoD has performed far better than Infernal for me, with almost identical gear.
Ramuh.Austar
Serveur: Ramuh
Game: FFXI
Posts: 10481
By Ramuh.Austar 2019-12-27 17:59:46
would only take three ws, one at 1k, 2k, and 3k each. preferably with a 119 weapon that doesn't have magic damage on it
|
|