|
The Sealed Dagger: A Ninja Guide
By Boshi 2016-09-19 11:07:22
Odium is a mainhand option if you wanna conserve some dmg kn ws. Blurred knife +1 if you wanna drop the bank.
Kustawi isn't -bad- either
[+]
By Verda 2016-09-19 12:35:43
Does anyone have an amazing lua they would like to share? I finally got my aeonic katana and already have a lot of light armor job gear and would like to start working on my NIN now. Very much appreciated.
[+]
Server: Asura
Game: FFXI
Posts: 1326
By Asura.Azagarth 2016-09-19 15:27:44
I can start you with what I have, in return when you make it better please let me know :D
Code -------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
include('Include/AugmentedGear.lua')
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.Buff.Migawari = buffactive.migawari or false
state.Buff.Doom = buffactive.doom or false
state.Buff.Yonin = buffactive.Yonin or false
state.Buff.Innin = buffactive.Innin or false
state.Buff.Futae = buffactive.Futae or false
determine_haste_group()
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job. Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
state.OffenseMode:options('Normal', 'Acc', 'HighAcc')
state.HybridMode:options('Normal', 'Evasion', 'PDT')
state.WeaponskillMode:options('Normal', 'Acc', 'Mod')
state.CastingMode:options( 'MAB', 'Normal')
state.PhysicalDefenseMode:options('PDT', 'MDT')
gear.MovementFeet = {name="Hachiya Kyahan +1"}
gear.DayFeet = "Rao sune-ate"
gear.NightFeet = "Hachiya Kyahan +1"
select_movement_feet()
select_default_macro_book()
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Precast sets
--------------------------------------
Andartia={}
Andartia.MAB={ name="Andartia's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','"Mag.Atk.Bns."+10',}}
Andartia.DA= { name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}}
Andartia.WSD= { name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Weapon skill damage +10%',}}
-- Precast sets to enhance JAs
sets.precast.JA['Mijin Gakure'] = {legs="Mochizuki Hakama"}
sets.precast.JA['Futae'] = {Hands="Hattori Tekko +1"}
sets.precast.JA['Sange'] = {legs="Mochizuki Chainmail +1"}
-- Waltz set (chr and vit)
sets.precast.Waltz = {}
-- Don't need any special gear for Healing Waltz.
sets.precast.Waltz['Healing Waltz'] = {}
-- Set for acc on steps, since Yonin drops acc a fair bit
sets.precast.Step = {neck="Subtlety Spec."}
sets.precast.Flourish1 = {waist="Chaac Belt"}
-- Fast cast sets for spells
sets.precast.FC = {
ammo="Staunch Tathlum",
head=HercHead.TA,
body="Foppish Tunica",
hands="Leyline Gloves",
legs=HercLegs.FC,
feet=HercFeet.FC,
neck="Willpower Torque",
waist="Druid's Rope",
left_ear="Halasz Earring",
right_ear="Loquac. Earring",
left_ring="Prolix Ring",
right_ring="Defending Ring",
back="Mujin Mantle",
}
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {
neck="Magoraga Beads",
body="Mochi. Chainmail +1",})
-- Snapshot for ranged
sets.precast.RA = {}
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {ammo="Seething bomblet",
head=HercHead.TA,
body=HercBody.WSD,
hands=HercHands.WSD,
legs="Hiza. Hizayoroi +1",
feet=HercFeet.WSD,
neck="Fotia Gorget",
waist="Windbuffet Belt +1",
left_ear="Brutal Earring",
right_ear="Cessance Earring",
left_ring="Epona's Ring",
right_ring="Apate Ring",
back=Andartia.WSD}
sets.precast.WS.Acc = set_combine(sets.precast.WS, {ammo="Seething bomblet",
head=HercHead.ACC,
body=HercBody.WSD,
hands=HercHands.ACC,
legs="Hiza. Hizayoroi +1",
feet=HercFeet.CRITACC,
neck="Fotia Gorget",
waist="Grunfeld Belt",
left_ear="Mache Earring",
right_ear="Cessance Earring",
left_ring="Epona's Ring",
right_ring="Apate Ring",
back=Andartia.WSD})
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
sets.precast.WS['Blade: Ten'] = set_combine(sets.precast.WS,
{ammo="Seething bomblet",
head="Lilitu headpiece",
neck="Caro necklace",
hands=HercHands.WSD,
waist="Grunfeld rope",
body=HercBody.WSD,
legs="Hiza. Hizayoroi +1",
feet=HercFeet.WSD,
left_ear="Mache Earring",
left_ring="Ifrit Ring +1",
right_ring="Ifrit Ring +1"})
sets.precast.WS['Blade: Shun'] = set_combine(sets.precast.WS,
{ head="Lilitu headpiece",
body={ name="Adhemar Jacket", augments={'DEX+10','AGI+10','Accuracy+15',}},
hands=HercHands.ACC,
legs="Samnuha tights",
feet=HercFeet.CRITACC,
waist="Thunder belt",
back=Andartia.DA,
right_ring="Ramuh Ring"})
sets.precast.WS['Blade: Metsu'] = set_combine(sets.precast.WS,
{ ammo="Jukukik feather",
head="Lilitu headpiece",
neck="Caro necklace",
body=HercBody.WSD,
hands=HercHands.WSD,
legs=HercLegs.WSD,
left_ear="Mache Earring",
right_ear="Mache Earring",
feet=HercFeet.WSD,
waist="Grunfeld rope",
right_ring="Ramuh Ring",
left_ring="Ramuh Ring"})
sets.precast.WS['Blade: Hi'] = {
ammo="Yetshila",
head={ name="Adhemar Bonnet", augments={'DEX+10','AGI+10','Accuracy+15',}},
body="Abnoba Kaftan",
hands={ name="Ryuo Tekko", augments={'DEX+10','Accuracy+20','"Dbl.Atk."+3',}},
legs=HercLegs.CRIT,
feet=HercFeet.CRIT,
neck="Rancor Collar",
waist="Windbuffet Belt +1",
left_ear="Brutal Earring",
right_ear="Cessance Earring",
left_ring="Epona's Ring",
right_ring="Apate Ring",
back=Andartia.WSD}
--------------------------------------
-- Midcast sets
--------------------------------------
sets.midcast.FastRecast = {
ear2="Loquacious Earring",ring1="Prolix Ring"}
sets.midcast.SelfNinjutsu = {ammo="Staunch Tathlum",
head="Hachiya hatsuburi +1",
body="Foppish Tunica",
hands="Rawhide Gloves",
legs=HercLegs.FC,
feet="Mochi. Kyahan +1",
neck="Willpower Torque",
waist="Druid's Rope",
left_ear="Stealth Earring",
right_ear="Loquac. Earring",
left_ring="Prolix Ring",
right_ring="Evanescence Ring",
back="Mujin Mantle",}
sets.midcast.Utsusemi = set_combine(sets.midcast.SelfNinjutsu, {
ammo="Staunch Tathlum",
head=HercHead.TA,
body="Foppish Tunica",
hands="Leyline Gloves",
legs=HercLegs.FC,
neck="Willpower Torque",
waist="Druid's Rope",
left_ear="Halasz Earring",
right_ear="Loquac. Earring",
left_ring="Prolix Ring",
right_ring="Defending Ring",
feet="Hattori Kyahan",
back=Andartia.DA})
sets.midcast.ElementalNinjutsu = {
ammo="Ghastly Tathlum",
head=HercHead.MAB,
body="Samnuha coat",
Hands="Leyline gloves",
legs=HercLegs.MAB,
feet=HercFeet.MBD,
neck="Sanctity necklace",
waist="Cimmerian sash",
left_ear="Friomisi Earring", right_ear="Static Earring",
left_ring="Stikini Ring", right_ring="Stikini Ring",
back=Andartia.MAB,}
sets.midcast.ElementalNinjutsu.MAB = {
ammo="Ghastly Tathlum",
head=HercHead.MAB,
body="Samnuha coat",
Hands="Leyline gloves",
legs=HercLegs.MAB,
feet=HercFeet.MBD,
neck="Sanctity necklace",
waist="Cimmerian sash",
left_ear="Friomisi Earring", right_ear="Static Earring",
left_ring="Locus Ring", right_ring="Mujin Band",
back=Andartia.MAB,}
sets.midcast.NinjutsuDebuff = {
ammo="Hydrocera",
head="Hachi. Hatsu. +1",
body="Samnuha coat",
hands=HercHands.MACC,
legs=HercLegs.MAB,
feet=HercFeet.MAB,
neck="Ninjutsu Torque",
waist="Ovate rope",
left_ear="Stealth Earring", right_ear="Ninjutsu Earring",
left_ring="Stikini Ring", right_ring="Stikini Ring",
back=Andartia.MAB,}
sets.midcast.NinjutsuBuff = {
ammo="Staunch Tathlum",
head="Hachiya hatsuburi +1",
body="Foppish Tunica",
hands="Rawhide Gloves",
legs="Wukong's Haka. +1",
feet="Mochi. Kyahan +1",
neck="Ninjutsu Torque",
waist="Cimmerian Rope",
left_ear="Stealth Earring",
right_ear="Ninjutsu Earring",
left_ring="Stikini Ring",
right_ring="Stikini Ring",
back="Mujin Mantle",}
sets.midcast.RA = {}
--------------------------------------
-- Idle/resting/defense/etc sets
--------------------------------------
-- Resting sets
sets.resting = {ammo="Staunch Tathlum",
head="Rao kabuto",
body="Hizamaru haramaki +1",
hands="Rao kote",
legs={ name="Rao Haidate", augments={'Accuracy+20','"Dbl.Atk."+3','Pet: Accuracy+20',}},
feet=gear.MovementFeet,
neck="Sanctity necklace",
waist="Flume Belt",
left_ear="Infused Earring", right_ear="Genmei Earring",
left_ring="Shneddick Ring",
right_ring="Defending Ring",
back="Shadow mantle"}
-- Idle sets
sets.idle = {ammo="Staunch Tathlum",
head="Rao kabuto",
body="Hizamaru haramaki +1",
hands="Rao kote",
legs={ name="Rao Haidate", augments={'Accuracy+20','"Dbl.Atk."+3','Pet: Accuracy+20',}},
feet=gear.MovementFeet,
neck="Sanctity necklace",
waist="Flume Belt",
left_ear="Infused Earring", right_ear="Genmei Earring",
left_ring="Shneddick Ring",
right_ring="Defending Ring",
back="Shadow mantle"}
sets.idle.Town = {ammo="Staunch Tathlum",
head="Rao kabuto",
body="Hizamaru haramaki +1",
hands="Rao kote",
legs="Rao Haidate",
feet=gear.MovementFeet,
neck="Sanctity necklace",
waist="Flume Belt",
left_ear="Infused Earring", right_ear="Genmei Earring",
left_ring="Shneddick Ring",
right_ring="Defending Ring",
back="Shadow mantle"}
sets.idle.Weak = {ammo="Staunch Tathlum",
head="Rao kabuto",
body="Hizamaru haramaki +1",
hands="Rao kote",
legs="Rao Haidate",
feet=gear.MovementFeet,
neck="Sanctity necklace",
waist="Flume Belt",
left_ear="Infused Earring", right_ear="Genmei Earring",
left_ring="Shneddick Ring",
right_ring="Defending Ring",
back="Shadow mantle"}
-- Defense sets
sets.defense.Evasion = {neck="Subtlety Spec.", back="Yokaze Mantle"}
sets.defense.PDT = {
ammo="Togakushi Shuriken",
head="Ryuo Somen",
body="Emet Harness +1",
hands=HercHands.PDT,
legs=HercLegs.DT,
feet=HercFeet.DT,
neck="Loricate Torque",
waist="Flume Belt",
left_ear="Genmei Earring",
right_ear="Suppanomimi",
left_ring="Gelatinous Ring +1",
right_ring="Defending Ring",
back="Solemnity Cape",
}
sets.defense.MDT = {
ammo="Togakushi Shuriken",
head="Dampening Tam",
body="Hiza. Haramaki +1",
hands="Floral Gauntlets",
legs=HercLegs.DT,
feet=HercFeet.DT,
neck="Loricate Torque",
waist="Flume Belt",
left_ear="Brutal Earring",
right_ear="Static Earring",
left_ring="Shadow Ring",
right_ring="Defending Ring",
back="Solemnity Cape",
}
sets.Kiting = {left_ring="Shneddick Ring",feet=gear.MovementFeet}
--------------------------------------
-- Engaged sets
--------------------------------------
-- Normal melee group
sets.engaged = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs="Samnuha tights",
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Patentia sash",
left_ear="Brutal Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.Acc = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs=HercLegs.TA,
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Patentia sash",
left_ear="Brutal Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.HighAcc = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs=HercLegs.ACC,
feet="Hiza. Sune-Ate +1",
neck="Subtlety Spec.",
waist="Patentia sash",
left_ear="Cessance Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Cacoethic Ring",
back=Andartia.DA}
sets.engaged.Evasion = {}
sets.engaged.Acc.Evasion = {}
sets.engaged.PDT = {}
sets.engaged.Acc.PDT = {}
-- Custom melee group: High Haste (~20% DW)
sets.engaged.HighHaste = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands=HercHands.TA,
legs=HercLegs.TA,
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Windbuffet belt +1",
left_ear="Brutal Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.Acc.HighHaste = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands=HercHands.TA,
legs=HercLegs.TA,
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Windbuffet belt +1",
left_ear="Brutal Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.HighAcc.HighHaste = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands=HercHands.ACC,
legs=HercLegs.ACC,
feet="Hiza. Sune-Ate +1",
neck="Subtlety Spec.",
waist="Kentarch belt +1",
left_ear="Cessance Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Cacoethic Ring",
back=Andartia.DA}
sets.engaged.Evasion.HighHaste = {}
sets.engaged.Acc.Evasion.HighHaste = {}
sets.engaged.PDT.HighHaste = {}
sets.engaged.Acc.PDT.HighHaste = {}
-- Custom melee group: Embrava Haste (7% DW)
sets.engaged.EmbravaHaste = {}
sets.engaged.HighAcc.EmbravaHaste = {}
sets.engaged.Acc.EmbravaHaste = {}
sets.engaged.Evasion.EmbravaHaste = {}
sets.engaged.Acc.Evasion.EmbravaHaste = {}
sets.engaged.PDT.EmbravaHaste = {}
sets.engaged.Acc.PDT.EmbravaHaste = {}
-- Custom melee group: Max Haste (0% DW)
sets.engaged.MaxHaste = {ammo="Togakushi Shuriken",
head="Adhemar bonnet",
body=HercBody.CRIT,
hands=HercHands.TA,
legs=HercLegs.TA,
feet=HercFeet.TA,
neck="Erudition necklace",
waist="Windbuffet Belt +1",
left_ear="Brutal Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.Acc.MaxHaste = {ammo="Togakushi Shuriken",
head=HercHead.TA,
body=HercBody.CRIT,
hands=HercHands.TA,
legs=HercLegs.TA,
feet=HercFeet.TA,
neck="Erudition necklace",
waist="Windbuffet Belt +1",
left_ear="Brutal Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.HighAcc.MaxHaste = {ammo="Togakushi Shuriken",
head=HercHead.ACC,
body=HercBody.CRIT,
hands=HercHands.ACC,
legs=HercLegs.ACC,
feet=HercFeet.CRITACC,
neck="Subtlety Spec.",
waist="Kentarch Belt +1",
left_ear="Mache Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Cacoethic Ring",
back=Andartia.DA}
sets.engaged.Evasion.MaxHaste = {}
sets.engaged.Acc.Evasion.MaxHaste = {}
sets.engaged.PDT.MaxHaste = {}
sets.engaged.Acc.PDT.MaxHaste = {}
--------------------------------------
-- Custom buff sets
--------------------------------------
sets.buff.Migawari = {body="Adhemar Jacket"}
sets.buff.Doom = {waist="Gishdubar sash",ring1="Saida Ring",ring2="Saida Ring"}
sets.buff.Yonin = {}
sets.buff.Innin = {}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_aftercast(spell, action, spellMap, eventArgs)
if not spell.interrupted and spell.english == "Migawari: Ichi" then
state.Buff.Migawari = true
end
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
function job_buff_change(buff, gain)
if S{'haste','march','embrava','haste samba'}:contains(buff:lower()) then
determine_haste_group()
handle_equipping_gear(player.status)
elseif state.Buff[buff] ~= nil then
handle_equipping_gear(player.status)
end
end
function job_status_change(new_status, old_status)
if new_status == 'Idle' then
select_movement_feet()
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Get custom spell maps
function job_get_spell_map(spell, default_spell_map)
if spell.skill == "Ninjutsu" then
if not default_spell_map then
if spell.target.type == 'SELF' then
return 'NinjutsuBuff'
else
return 'NinjutsuDebuff'
end
end
end
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if state.Buff.Migawari then
idleSet = set_combine(idleSet, sets.buff.Migawari)
end
if state.Buff.Doom then
idleSet = set_combine(idleSet, sets.buff.Doom)
end
return idleSet
end
-- Modify the default melee set after it was constructed.
function customize_melee_set(meleeSet)
if state.Buff.Migawari then
meleeSet = set_combine(meleeSet, sets.buff.Migawari)
end
if state.Buff.Doom then
meleeSet = set_combine(meleeSet, sets.buff.Doom)
end
return meleeSet
end
-- Called by the default 'update' self-command.
function job_update(cmdParams, eventArgs)
select_movement_feet()
determine_haste_group()
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
function determine_haste_group()
classes.CustomMeleeGroups:clear()
if buffactive.embrava and (buffactive.march == 2 or (buffactive.march and buffactive.haste)) then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive.march == 2 and buffactive.haste then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive.embrava and (buffactive.haste or buffactive.march) then
classes.CustomMeleeGroups:append('EmbravaHaste')
elseif buffactive.haste then
classes.CustomMeleeGroups:append('HighHaste')
elseif buffactive.march == 2 then
classes.CustomMeleeGroups:append('HighHaste')
elseif buffactive.march == 1 and buffactive['haste samba'] then
classes.CustomMeleeGroups:append('HighHaste')
end
end
function select_movement_feet()
if world.time >= 17*60 or world.time < 7*60 then
gear.MovementFeet.name = gear.NightFeet
else
gear.MovementFeet.name = gear.DayFeet
end
end
function job_post_precast(spell, action, spellMap, eventArgs)
if spell.type == 'WeaponSkill' then
if world.time >= 17*60 or world.time < 7*60 then -- Dusk to Genmei time.
equip({ear1="Lugra Earring +1", ear2="Lugra Earring"})
end
end
end
function job_post_precast(spell, action, spellMap, eventArgs)
if spellMap == 'ElementalNinjutsu' then
if spell.english:contains(': San') then
equip({feet="Mochi. Kyahan +1"})
end
end
end
function job_post_midcast(spell, action, spellMap, eventArgs)
if spellMap == 'ElementalNinjutsu' then
if spell.english:contains(': San') then
equip({head="Mochi. Hatsuburi +1"})
end
if spell.element == world.day_element or spell.element == world.weather_element then
equip({waist="Hachirin-no-Obi"})
end
if state.Buff.Futae then
equip(sets.precast.JA['Futae'])
end
if state.Buff.Doom then
equip(sets.buff.Doom)
end
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'DNC' then
set_macro_page(1, 4)
elseif player.sub_job == 'WAR' then
set_macro_page(2, 4)
elseif player.sub_job == 'RUN' then
set_macro_page(3, 4)
elseif player.sub_job == 'RDM' then
set_macro_page(4, 4)
else
set_macro_page(1, 4)
end
end
By eliroo 2016-09-19 15:45:39
If you aren't using the Migawari body for the state.buff check then why not just leave sets.buff.Migawari blank so you don't mess up with your TP set w/ max haste since Adhemar isn't ideal for haste capped situations.
May be a good idea to make a switch that can be toggled on/off and determines if you equip the Migawari body if Migawari is active, does that make sense?
I don't enough about Gearswap to make the toggle happen.
[+]
Server: Asura
Game: FFXI
Posts: 1326
By Asura.Azagarth 2016-09-19 16:15:52
You are by all means correct, I normally do use the body, but I havent updated my lua since I last used nin, and that was on a mob I did not want the emp body for (specifically wanted adhemar at all times because I also dont have a haste/march toggle and needed the DW). Its why I havent deleted it all together, sometimes I will use it other times I do. I am also not smart enough to build a toggle for it haha, or wanting too due to macro line restrictions (I play with controller).
[+]
By eliroo 2016-09-19 16:25:15
You are by all means correct, I normally do use the body, but I havent updated my lua since I last used nin, and that was on a mob I did not want the emp body for (specifically wanted adhemar at all times because I also dont have a haste/march toggle and needed the DW). Its why I havent deleted it all together, sometimes I will use it other times I do. I am also not smart enough to build a toggle for it haha, or wanting too due to macro line restrictions (I play with controller).
Does the determine_haste_group() function not determine what sets you are using?
Code function determine_haste_group()
classes.CustomMeleeGroups:clear()
if buffactive.embrava and (buffactive.march == 2 or (buffactive.march and buffactive.haste)) then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive.march == 2 and buffactive.haste then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive.embrava and (buffactive.haste or buffactive.march) then
classes.CustomMeleeGroups:append('EmbravaHaste')
elseif buffactive.haste then
classes.CustomMeleeGroups:append('HighHaste')
elseif buffactive.march == 2 then
classes.CustomMeleeGroups:append('HighHaste')
elseif buffactive.march == 1 and buffactive['haste samba'] then
classes.CustomMeleeGroups:append('HighHaste')
end
end
Should be determining your haste group and setting the value so it changes your tp sets based on how much haste you have.
Interestingly enough though it seems to be lacking GEO-Haste and doesn't differentiate between Haste I and Haste II so that part could use some work.
Coding lua isn't my thing though, well not yet. If I could suggest actual changes I would, I am just trying to identify what changes would be ideal.
Also thank you for the lua, I will personally be using it once I get my NIN geared up. Currently gathering gear for both SMN and NIN xD.
Server: Asura
Game: FFXI
Posts: 1326
By Asura.Azagarth 2016-09-19 17:00:08
I toggle my acc sets, then the haste function applies appropriate set to haste tier. I have therefore 9 sets, normal (low acc) which haste 0-30-capped haste, mid acc 0-30-capped, and max acc 0-30-capped.
You need a toggle for haste2 there is no way for gs to know the difference, they share came code. I think someone on forums has done this, but I just havent had time to incorporate it. Same goes for MG. I also tweaked it a bit for my normal use. I find I never am out of 3 states on haste - no haste, 30% (be it trusts for just haste2, or in a normal party with MG+haste), and maxed haste (normally solo too). If you find for you this is not the case this part will need major hauls for you. This is also why I never worried about MG, though I should someday.
By no means is my lua the best out there, but its a good start and has lots of little rules I like (lugras, obis, hattori, cursed, etc). I find it gets you where you need to be and honestly this is only a few thing left I would like in it for my uses, and I would add if someone else wrote bc i dont know how or got the time :D
1.) That MG / Haste2 code.
2.) Migwari toggle would be nice
3.) Enmity toggle for tanking (hope oneday we can again_
4.) I have it in my blu lua, but cant figure out how to get it to work here, but would like an auto update to a special PDT/mdt set for when sleep, terror, stun, etc are on me.
5.) I honestly dont get how the hybrid sets work, can someone share how I would use this on controller? Aka PDT+acc set, or EVA+High etc, etc.
6.) I would like to add a toggle to disable ammo (hate blinking for mages in cp/events)
7.) Would like an AM alert
There are more but as you can see I have lots to do, but that can be said of the other 7 jobs I actively play too lmao :D
By Verda 2016-09-19 17:04:52
Thanks for sharing Azagarth it's a great start, and I'll share any upgrades I make.
Edit: and beyond that generous and a great lua ty :D
Quetzalcoatl.Langly
Server: Quetzalcoatl
Game: FFXI
Posts: 684
By Quetzalcoatl.Langly 2016-09-19 23:43:56
Pulled directly from Ores's Lua. With a Haste toggle for Haste 1 or 2. Code state.HasteMode = M{['description']='Haste Mode', 'Normal', 'Hi'}
Code function determine_haste_group()
classes.CustomMeleeGroups:clear()
-- assuming +4 for marches (ghorn has +5)
-- Haste (white magic) 15%
-- Haste Samba (Sub) 5%
-- Haste (Merited DNC) 10% (never account for this)
-- Victory March +0/+3/+4/+5 9.4/14%/15.6%/17.1% +0
-- Advancing March +0/+3/+4/+5 6.3/10.9%/12.5%/14% +0
-- Embrava 30% with 500 enhancing skill
-- Mighty Guard - 15%
-- buffactive[580] = geo haste
-- buffactive[33] = regular haste
-- buffactive[604] = mighty guard
-- state.HasteMode = toggle for when you know Haste II is being cast on you
-- Hi = Haste II is being cast. This is clunky to use when both haste II and haste I are being cast
if state.HasteMode.value == 'Hi' then
if ( ( (buffactive[33] or buffactive[580] or buffactive.embrava) and (buffactive.march or buffactive[604]) ) or
( buffactive[33] and (buffactive[580] or buffactive.embrava) ) or
( buffactive.march == 2 and buffactive[604] ) ) then
add_to_chat(8, '-------------Max-Haste Mode Enabled--------------')
classes.CustomMeleeGroups:append('MaxHaste')
elseif ( (buffactive[33] or buffactive.march == 2 or buffactive[580]) and buffactive['haste samba'] ) then
add_to_chat(8, '-------------Haste 35%-------------')
classes.CustomMeleeGroups:append('Haste_35')
elseif ( ( buffactive[580] or buffactive[33] or buffactive.march == 2 ) or
( buffactive.march == 1 and buffactive[604] ) ) then
add_to_chat(8, '-------------Haste 30%-------------')
classes.CustomMeleeGroups:append('Haste_30')
elseif ( buffactive.march == 1 or buffactive[604] ) then
add_to_chat(8, '-------------Haste 15%-------------')
classes.CustomMeleeGroups:append('Haste_15')
end
else
if ( buffactive[580] and ( buffactive.march or buffactive[33] or buffactive.embrava or buffactive[604]) ) or -- geo haste + anything
( buffactive.embrava and (buffactive.march or buffactive[33] or buffactive[604]) ) or -- embrava + anything
( buffactive.march == 2 and (buffactive[33] or buffactive[604]) ) or -- two marches + anything
( buffactive[33] and buffactive[604] and buffactive.march ) then -- haste + mighty guard + any marches
add_to_chat(8, '-------------Max Haste Mode Enabled--------------')
classes.CustomMeleeGroups:append('MaxHaste')
elseif ( (buffactive[604] or buffactive[33]) and buffactive['haste samba'] and buffactive.march == 1) or -- MG or haste + samba with 1 march
( buffactive.march == 2 and buffactive['haste samba'] ) or
( buffactive[580] and buffactive['haste samba'] ) then
add_to_chat(8, '-------------Haste 35%-------------')
classes.CustomMeleeGroups:append('Haste_35')
elseif ( buffactive.march == 2 ) or -- two marches from ghorn
( (buffactive[33] or buffactive[604]) and buffactive.march == 1 ) or -- MG or haste + 1 march
( buffactive[580] ) or -- geo haste
( buffactive[33] and buffactive[604] ) then -- haste with MG
add_to_chat(8, '-------------Haste 30%-------------')
classes.CustomMeleeGroups:append('Haste_30')
elseif buffactive[33] or buffactive[604] or buffactive.march == 1 then
add_to_chat(8, '-------------Haste 15%-------------')
classes.CustomMeleeGroups:append('Haste_15')
end
end
end
[+]
Quetzalcoatl.Langly
Server: Quetzalcoatl
Game: FFXI
Posts: 684
By Quetzalcoatl.Langly 2016-09-19 23:48:31
3.) Enmity toggle for tanking (hope oneday we can again_
But you should be putting haste into your enmity generation abilities anyway! Flash/Stun/Voke all those should have enmity(and haste where applicable). C'mooon. You can do it!
I tanked Erynis... >.>
.... shoosh let me have my moment.
Server: Asura
Game: FFXI
Posts: 1326
By Asura.Azagarth 2016-09-20 00:01:14
Quetzalcoatl.Langly said: »Pulled directly from Ores's Lua. With a Haste toggle for Haste 1 or 2. Code state.HasteMode = M{['description']='Haste Mode', 'Normal', 'Hi'}
Code function determine_haste_group()
classes.CustomMeleeGroups:clear()
-- assuming +4 for marches (ghorn has +5)
-- Haste (white magic) 15%
-- Haste Samba (Sub) 5%
-- Haste (Merited DNC) 10% (never account for this)
-- Victory March +0/+3/+4/+5 9.4/14%/15.6%/17.1% +0
-- Advancing March +0/+3/+4/+5 6.3/10.9%/12.5%/14% +0
-- Embrava 30% with 500 enhancing skill
-- Mighty Guard - 15%
-- buffactive[580] = geo haste
-- buffactive[33] = regular haste
-- buffactive[604] = mighty guard
-- state.HasteMode = toggle for when you know Haste II is being cast on you
-- Hi = Haste II is being cast. This is clunky to use when both haste II and haste I are being cast
if state.HasteMode.value == 'Hi' then
if ( ( (buffactive[33] or buffactive[580] or buffactive.embrava) and (buffactive.march or buffactive[604]) ) or
( buffactive[33] and (buffactive[580] or buffactive.embrava) ) or
( buffactive.march == 2 and buffactive[604] ) ) then
add_to_chat(8, '-------------Max-Haste Mode Enabled--------------')
classes.CustomMeleeGroups:append('MaxHaste')
elseif ( (buffactive[33] or buffactive.march == 2 or buffactive[580]) and buffactive['haste samba'] ) then
add_to_chat(8, '-------------Haste 35%-------------')
classes.CustomMeleeGroups:append('Haste_35')
elseif ( ( buffactive[580] or buffactive[33] or buffactive.march == 2 ) or
( buffactive.march == 1 and buffactive[604] ) ) then
add_to_chat(8, '-------------Haste 30%-------------')
classes.CustomMeleeGroups:append('Haste_30')
elseif ( buffactive.march == 1 or buffactive[604] ) then
add_to_chat(8, '-------------Haste 15%-------------')
classes.CustomMeleeGroups:append('Haste_15')
end
else
if ( buffactive[580] and ( buffactive.march or buffactive[33] or buffactive.embrava or buffactive[604]) ) or -- geo haste + anything
( buffactive.embrava and (buffactive.march or buffactive[33] or buffactive[604]) ) or -- embrava + anything
( buffactive.march == 2 and (buffactive[33] or buffactive[604]) ) or -- two marches + anything
( buffactive[33] and buffactive[604] and buffactive.march ) then -- haste + mighty guard + any marches
add_to_chat(8, '-------------Max Haste Mode Enabled--------------')
classes.CustomMeleeGroups:append('MaxHaste')
elseif ( (buffactive[604] or buffactive[33]) and buffactive['haste samba'] and buffactive.march == 1) or -- MG or haste + samba with 1 march
( buffactive.march == 2 and buffactive['haste samba'] ) or
( buffactive[580] and buffactive['haste samba'] ) then
add_to_chat(8, '-------------Haste 35%-------------')
classes.CustomMeleeGroups:append('Haste_35')
elseif ( buffactive.march == 2 ) or -- two marches from ghorn
( (buffactive[33] or buffactive[604]) and buffactive.march == 1 ) or -- MG or haste + 1 march
( buffactive[580] ) or -- geo haste
( buffactive[33] and buffactive[604] ) then -- haste with MG
add_to_chat(8, '-------------Haste 30%-------------')
classes.CustomMeleeGroups:append('Haste_30')
elseif buffactive[33] or buffactive[604] or buffactive.march == 1 then
add_to_chat(8, '-------------Haste 15%-------------')
classes.CustomMeleeGroups:append('Haste_15')
end
end
end
Will maybe be a dumb question, but you can just copy and paste this whole part I assume? /console gs c toggle HasteMode as the macro call i assume?
Quetzalcoatl.Langly
Server: Quetzalcoatl
Game: FFXI
Posts: 684
By Quetzalcoatl.Langly 2016-09-20 00:08:58
I believe it's "//gs c cycle HasteMode"
You could copy and paste that. But do make sure you have enough defined sets for your melee classes. As you can see that means you need:
sets.engaged.<Acc>.<Haste level> (in more literal terms, this determine haste group function creates Melee Classes for 1) no haste, 2) "MaxHaste", 3) "Haste_35", 4) "Haste_30", 5) "Haste_15"
So something like "sets.engaged.Acc2.Haste_30"
And you will need to define -all of them-. Luckily a lot of set_combine() commands will save you tons of time.
This is the price to pay for min-maxing! :D
(Here's a quick example of one of my branches): Code ----------------------------------
-- 35% Haste (~10-12%DW Needed)
----------------------------------
-- Acc 1095/1070 (Heishi/Ochu|Kikoku/Ochu)) :: Acc 1136/1099 (Heishi/Shigi|Kikoku/Shigi) :: Acc ??? (Heishi/Kanaria)
-- DW Total in Gear: 12 DW
sets.engaged.Haste_35 = set_combine(sets.engaged.MaxHaste, {waist="Reiki Yotai",ear1="Suppanomimi",})
-- Acc 1127/1102 (Heishi/Ochu|Kikoku/Ochu)) :: Acc 1168/1122 (Heishi/Shigi|Kikoku/Shigi) :: Acc ??? (Heishi/Kanaria)
-- DW Total in Gear: 12 DW
sets.engaged.Acc.Haste_35 = set_combine(sets.engaged.Acc.MaxHaste, {body="Adhemar Jacket",waist="Reiki Yotai",ear1="Brutal Earring",})
-- Acc 1159/1134 (Heishi/Ochu|Kikoku/Ochu)) :: Acc 1200/1154 (Heishi/Shigi|Kikoku/Shigi) :: Acc ??? (Heishi/Kanaria)
-- DW Total in Gear: 12 DW
sets.engaged.Acc2.Haste_35 = set_combine(sets.engaged.Acc2.MaxHaste, {waist="Reiki Yotai"})
-- Acc 1217/1192 (Heishi/Ochu|Kikoku/Ochu)) :: Acc 1258/1212 (Heishi/Shigi|Kikoku/Shigi) :: Acc ??? (Heishi/Kanaria)
-- DW Total in Gear: 13 DW
sets.engaged.Acc3.Haste_35 = set_combine(sets.engaged.Acc3.MaxHaste, {head="Ryuo Somen"})
sets.engaged.Innin.Haste_35 = sets.engaged.Haste_35
sets.engaged.Innin.Acc.Haste_35 = sets.engaged.Acc.Haste_35
sets.engaged.Innin.Acc2.Haste_35 = sets.engaged.Acc2.Haste_35
sets.engaged.Innin.Acc3.Haste_35 = sets.engaged.Acc3.Haste_35
sets.engaged.PDT.Haste_35 = set_combine(sets.engaged.Haste_35, sets.engaged.HastePDT)
sets.engaged.Acc.PDT.Haste_35 = set_combine(sets.engaged.Acc.Haste_35, sets.engaged.HastePDT)
sets.engaged.Acc2.PDT.Haste_35 = set_combine(sets.engaged.Acc2.Haste_35, sets.engaged.HastePDT)
sets.engaged.Acc3.PDT.Haste_35 = set_combine(sets.engaged.Acc3.Haste_35, sets.engaged.AccPDT)
sets.engaged.Innin.PDT.Haste_35 = set_combine(sets.engaged.Innin.Haste_35, sets.engaged.HastePDT)
sets.engaged.Innin.Acc.PDT.Haste_35 = sets.engaged.Acc.PDT.Haste_35
sets.engaged.Innin.Acc2.PDT.Haste_35 = sets.engaged.Acc2.PDT.Haste_35
sets.engaged.Innin.Acc3.PDT.Haste_35 = sets.engaged.Acc3.PDT.Haste_35
(Those acc values I paste into my summary/comments may be slightly off these days with the cape additions etc. don't take them too literally)
Phoenix.Capuchin
Server: Phoenix
Game: FFXI
Posts: 3592
By Phoenix.Capuchin 2016-09-20 00:10:20
Odium is a mainhand option if you wanna conserve some dmg kn ws. Blurred knife +1 if you wanna drop the bank.
Kustawi isn't -bad- either
A couple other notable daggers:
Malevolence for whenever you might care about MAB (also, probably NIN's best AoE farming tools for Aeolian Edge)
Atoyac (OAT) still has some use if for whatever reason you just want TP generation with a dagger but it's easy enough content that your acc is fine despite the 188 skill. For NIN, can come in handy for Abyssea if you're ever farming something.
[+]
Server: Asura
Game: FFXI
Posts: 1326
By Asura.Azagarth 2016-09-20 00:47:45
Thanks Langly, I am going to try and updated my script tomorrow with those changes. I will tweak it probably for simplicity, I dislike having like 100 different sets (even if they are mostly empty), the game just isnt that complicated anymore for me haha. Though I will go to 1 extra haste tier that I never accounted for before (35%) but thats not a big issue, and easy copy and paste with a new name.
Server: Asura
Game: FFXI
Posts: 1326
By Asura.Azagarth 2016-09-20 01:16:40
getting error right away from line 662.... cant figure it out. I updated my gearsets name etc to accommodate (no gear yet just want the syntax to work before i throw in gear). Any help? Code -------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
include('Include/AugmentedGear.lua')
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.Buff.Migawari = buffactive.migawari or false
state.Buff.Doom = buffactive.doom or false
state.Buff.Yonin = buffactive.Yonin or false
state.Buff.Innin = buffactive.Innin or false
state.Buff.Futae = buffactive.Futae or false
determine_haste_group()
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job. Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
state.HasteMode = M{['description']='Haste Mode', 'Normal', 'Hi'}
state.OffenseMode:options('Normal', 'Acc', 'HighAcc')
state.HybridMode:options('Normal', 'Evasion', 'PDT')
state.WeaponskillMode:options('Normal', 'Acc', 'Mod')
state.CastingMode:options( 'MAB', 'Normal')
state.PhysicalDefenseMode:options('PDT', 'MDT')
gear.MovementFeet = {name="Hachiya Kyahan +1"}
gear.DayFeet = "Rao sune-ate"
gear.NightFeet = "Hachiya Kyahan +1"
select_movement_feet()
select_default_macro_book()
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Precast sets
--------------------------------------
Andartia={}
Andartia.MAB={ name="Andartia's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','"Mag.Atk.Bns."+10',}}
Andartia.DA= { name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}}
Andartia.WSD= { name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Weapon skill damage +10%',}}
-- Precast sets to enhance JAs
sets.precast.JA['Mijin Gakure'] = {legs="Mochizuki Hakama"}
sets.precast.JA['Futae'] = {Hands="Hattori Tekko +1"}
sets.precast.JA['Sange'] = {legs="Mochizuki Chainmail +1"}
-- Waltz set (chr and vit)
sets.precast.Waltz = {}
-- Don't need any special gear for Healing Waltz.
sets.precast.Waltz['Healing Waltz'] = {}
-- Set for acc on steps, since Yonin drops acc a fair bit
sets.precast.Step = {neck="Subtlety Spec."}
sets.precast.Flourish1 = {waist="Chaac Belt"}
-- Fast cast sets for spells
sets.precast.FC = {
ammo="Staunch Tathlum",
head=HercHead.TA,
body="Foppish Tunica",
hands="Leyline Gloves",
legs=HercLegs.FC,
feet=HercFeet.FC,
neck="Willpower Torque",
waist="Druid's Rope",
left_ear="Halasz Earring",
right_ear="Loquac. Earring",
left_ring="Prolix Ring",
right_ring="Defending Ring",
back="Mujin Mantle",
}
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {
neck="Magoraga Beads",
body="Mochi. Chainmail +1",})
-- Snapshot for ranged
sets.precast.RA = {}
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {ammo="Seething bomblet",
head=HercHead.TA,
body=HercBody.WSD,
hands=HercHands.WSD,
legs="Hiza. Hizayoroi +1",
feet=HercFeet.WSD,
neck="Fotia Gorget",
waist="Windbuffet Belt +1",
left_ear="Brutal Earring",
right_ear="Cessance Earring",
left_ring="Epona's Ring",
right_ring="Apate Ring",
back=Andartia.WSD}
sets.precast.WS.Acc = set_combine(sets.precast.WS, {ammo="Seething bomblet",
head=HercHead.ACC,
body=HercBody.WSD,
hands=HercHands.ACC,
legs="Hiza. Hizayoroi +1",
feet=HercFeet.CRITACC,
neck="Fotia Gorget",
waist="Grunfeld Belt",
left_ear="Mache Earring",
right_ear="Cessance Earring",
left_ring="Epona's Ring",
right_ring="Apate Ring",
back=Andartia.WSD})
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
sets.precast.WS['Blade: Ten'] = set_combine(sets.precast.WS,
{ammo="Seething bomblet",
head="Lilitu headpiece",
neck="Caro necklace",
hands=HercHands.WSD,
waist="Grunfeld rope",
body=HercBody.WSD,
legs="Hiza. Hizayoroi +1",
feet=HercFeet.WSD,
left_ear="Mache Earring",
left_ring="Ifrit Ring +1",
right_ring="Ifrit Ring +1"})
sets.precast.WS['Blade: Shun'] = set_combine(sets.precast.WS,
{ head="Lilitu headpiece",
body={ name="Adhemar Jacket", augments={'DEX+10','AGI+10','Accuracy+15',}},
hands=HercHands.ACC,
legs="Samnuha tights",
feet=HercFeet.CRITACC,
waist="Thunder belt",
back=Andartia.DA,
right_ring="Ramuh Ring"})
sets.precast.WS['Blade: Metsu'] = set_combine(sets.precast.WS,
{ ammo="Jukukik feather",
head="Lilitu headpiece",
neck="Caro necklace",
body=HercBody.WSD,
hands=HercHands.WSD,
legs=HercLegs.WSD,
left_ear="Mache Earring",
right_ear="Mache Earring",
feet=HercFeet.WSD,
waist="Grunfeld rope",
right_ring="Ramuh Ring",
left_ring="Ramuh Ring"})
sets.precast.WS['Blade: Hi'] = {
ammo="Yetshila",
head={ name="Adhemar Bonnet", augments={'DEX+10','AGI+10','Accuracy+15',}},
body="Abnoba Kaftan",
hands={ name="Ryuo Tekko", augments={'DEX+10','Accuracy+20','"Dbl.Atk."+3',}},
legs=HercLegs.CRIT,
feet=HercFeet.CRIT,
neck="Rancor Collar",
waist="Windbuffet Belt +1",
left_ear="Brutal Earring",
right_ear="Cessance Earring",
left_ring="Epona's Ring",
right_ring="Apate Ring",
back=Andartia.WSD}
--------------------------------------
-- Midcast sets
--------------------------------------
sets.midcast.FastRecast = {
ear2="Loquacious Earring",ring1="Prolix Ring"}
sets.midcast.SelfNinjutsu = {ammo="Staunch Tathlum",
head="Hachiya hatsuburi +1",
body="Foppish Tunica",
hands="Rawhide Gloves",
legs=HercLegs.FC,
feet="Mochi. Kyahan +1",
neck="Willpower Torque",
waist="Druid's Rope",
left_ear="Stealth Earring",
right_ear="Loquac. Earring",
left_ring="Prolix Ring",
right_ring="Evanescence Ring",
back="Mujin Mantle",}
sets.midcast.Utsusemi = set_combine(sets.midcast.SelfNinjutsu, {
ammo="Staunch Tathlum",
head=HercHead.TA,
body="Foppish Tunica",
hands="Leyline Gloves",
legs=HercLegs.FC,
neck="Willpower Torque",
waist="Druid's Rope",
left_ear="Halasz Earring",
right_ear="Loquac. Earring",
left_ring="Prolix Ring",
right_ring="Defending Ring",
feet="Hattori Kyahan",
back=Andartia.DA})
sets.midcast.ElementalNinjutsu = {
ammo="Ghastly Tathlum",
head=HercHead.MAB,
body="Samnuha coat",
Hands="Leyline gloves",
legs=HercLegs.MAB,
feet=HercFeet.MBD,
neck="Sanctity necklace",
waist="Cimmerian sash",
left_ear="Friomisi Earring", right_ear="Static Earring",
left_ring="Stikini Ring", right_ring="Stikini Ring",
back=Andartia.MAB,}
sets.midcast.ElementalNinjutsu.MAB = {
ammo="Ghastly Tathlum",
head=HercHead.MAB,
body="Samnuha coat",
Hands="Leyline gloves",
legs=HercLegs.MAB,
feet=HercFeet.MBD,
neck="Sanctity necklace",
waist="Cimmerian sash",
left_ear="Friomisi Earring", right_ear="Static Earring",
left_ring="Locus Ring", right_ring="Mujin Band",
back=Andartia.MAB,}
sets.midcast.NinjutsuDebuff = {
ammo="Hydrocera",
head="Hachi. Hatsu. +1",
body="Samnuha coat",
hands=HercHands.MACC,
legs=HercLegs.MAB,
feet=HercFeet.MAB,
neck="Ninjutsu Torque",
waist="Ovate rope",
left_ear="Stealth Earring", right_ear="Ninjutsu Earring",
left_ring="Stikini Ring", right_ring="Stikini Ring",
back=Andartia.MAB,}
sets.midcast.NinjutsuBuff = {
ammo="Staunch Tathlum",
head="Hachiya hatsuburi +1",
body="Foppish Tunica",
hands="Rawhide Gloves",
legs="Wukong's Haka. +1",
feet="Mochi. Kyahan +1",
neck="Ninjutsu Torque",
waist="Cimmerian Rope",
left_ear="Stealth Earring",
right_ear="Ninjutsu Earring",
left_ring="Stikini Ring",
right_ring="Stikini Ring",
back="Mujin Mantle",}
sets.midcast.RA = {}
--------------------------------------
-- Idle/resting/defense/etc sets
--------------------------------------
-- Resting sets
sets.resting = {ammo="Staunch Tathlum",
head="Rao kabuto",
body="Hizamaru haramaki +1",
hands="Rao kote",
legs={ name="Rao Haidate", augments={'Accuracy+20','"Dbl.Atk."+3','Pet: Accuracy+20',}},
feet=gear.MovementFeet,
neck="Sanctity necklace",
waist="Flume Belt",
left_ear="Infused Earring", right_ear="Genmei Earring",
left_ring="Shneddick Ring",
right_ring="Defending Ring",
back="Shadow mantle"}
-- Idle sets
sets.idle = {ammo="Staunch Tathlum",
head="Rao kabuto",
body="Hizamaru haramaki +1",
hands="Rao kote",
legs={ name="Rao Haidate", augments={'Accuracy+20','"Dbl.Atk."+3','Pet: Accuracy+20',}},
feet=gear.MovementFeet,
neck="Sanctity necklace",
waist="Flume Belt",
left_ear="Infused Earring", right_ear="Genmei Earring",
left_ring="Shneddick Ring",
right_ring="Defending Ring",
back="Shadow mantle"}
sets.idle.Town = {ammo="Staunch Tathlum",
head="Rao kabuto",
body="Hizamaru haramaki +1",
hands="Rao kote",
legs="Rao Haidate",
feet=gear.MovementFeet,
neck="Sanctity necklace",
waist="Flume Belt",
left_ear="Infused Earring", right_ear="Genmei Earring",
left_ring="Shneddick Ring",
right_ring="Defending Ring",
back="Shadow mantle"}
sets.idle.Weak = {ammo="Staunch Tathlum",
head="Rao kabuto",
body="Hizamaru haramaki +1",
hands="Rao kote",
legs="Rao Haidate",
feet=gear.MovementFeet,
neck="Sanctity necklace",
waist="Flume Belt",
left_ear="Infused Earring", right_ear="Genmei Earring",
left_ring="Shneddick Ring",
right_ring="Defending Ring",
back="Shadow mantle"}
-- Defense sets
sets.defense.Evasion = {neck="Subtlety Spec.", back="Yokaze Mantle"}
sets.defense.PDT = {
ammo="Togakushi Shuriken",
head="Ryuo Somen",
body="Emet Harness +1",
hands=HercHands.PDT,
legs=HercLegs.DT,
feet=HercFeet.DT,
neck="Loricate Torque",
waist="Flume Belt",
left_ear="Genmei Earring",
right_ear="Suppanomimi",
left_ring="Gelatinous Ring +1",
right_ring="Defending Ring",
back="Solemnity Cape",
}
sets.defense.MDT = {
ammo="Togakushi Shuriken",
head="Dampening Tam",
body="Hiza. Haramaki +1",
hands="Floral Gauntlets",
legs=HercLegs.DT,
feet=HercFeet.DT,
neck="Loricate Torque",
waist="Flume Belt",
left_ear="Brutal Earring",
right_ear="Static Earring",
left_ring="Shadow Ring",
right_ring="Defending Ring",
back="Solemnity Cape",
}
sets.Kiting = {left_ring="Shneddick Ring",feet=gear.MovementFeet}
--------------------------------------
-- Engaged sets
--------------------------------------
-- Normal melee group
sets.engaged = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs="Samnuha tights",
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Patentia sash",
left_ear="Brutal Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.Acc = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs=HercLegs.TA,
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Patentia sash",
left_ear="Brutal Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.HighAcc = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs=HercLegs.ACC,
feet="Hiza. Sune-Ate +1",
neck="Subtlety Spec.",
waist="Patentia sash",
left_ear="Cessance Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Cacoethic Ring",
back=Andartia.DA}
sets.engaged.Evasion = {}
sets.engaged.Acc.Evasion = {}
sets.engaged.PDT = {}
sets.engaged.Acc.PDT = {}
sets.engaged.Haste_15 = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs="Samnuha tights",
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Patentia sash",
left_ear="Brutal Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.Acc.Haste_15 = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs=HercLegs.TA,
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Patentia sash",
left_ear="Brutal Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.HighAcc.Haste_15 = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs=HercLegs.ACC,
feet="Hiza. Sune-Ate +1",
neck="Subtlety Spec.",
waist="Patentia sash",
left_ear="Cessance Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Cacoethic Ring",
back=Andartia.DA}
sets.engaged.Evasion.Haste_15 = {}
sets.engaged.Acc.Evasion.Haste_15 = {}
sets.engaged.PDT.Haste_15 = {}
sets.engaged.Acc.PDT.Haste_15 = {}
-- Custom melee group: High Haste (~20% DW)
sets.engaged.Haste_30 = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands=HercHands.TA,
legs=HercLegs.TA,
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Windbuffet belt +1",
left_ear="Brutal Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.Acc.Haste_30 = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands=HercHands.TA,
legs=HercLegs.TA,
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Windbuffet belt +1",
left_ear="Brutal Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.HighAcc.Haste_30 = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands=HercHands.ACC,
legs=HercLegs.ACC,
feet="Hiza. Sune-Ate +1",
neck="Subtlety Spec.",
waist="Kentarch belt +1",
left_ear="Cessance Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Cacoethic Ring",
back=Andartia.DA}
sets.engaged.Evasion.Haste_30 = {}
sets.engaged.Acc.Evasion.Haste_30 = {}
sets.engaged.PDT.Haste_30 = {}
sets.engaged.Acc.PDT.Haste_30 = {}
-- Custom melee group: Embrava Haste (7% DW)
sets.engaged.Haste_35 = {}
sets.engaged.HighAcc.Haste_35 = {}
sets.engaged.Acc.Haste_35= {}
sets.engaged.Evasion.Haste_35 = {}
sets.engaged.Acc.Evasion.Haste_35 = {}
sets.engaged.PDT.Haste_35 = {}
sets.engaged.Acc.PDT.Haste_35 = {}
-- Custom melee group: Max Haste (0% DW)
sets.engaged.MaxHaste = {ammo="Togakushi Shuriken",
head="Adhemar bonnet",
body=HercBody.CRIT,
hands=HercHands.TA,
legs=HercLegs.TA,
feet=HercFeet.TA,
neck="Erudition necklace",
waist="Windbuffet Belt +1",
left_ear="Brutal Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.Acc.MaxHaste = {ammo="Togakushi Shuriken",
head=HercHead.TA,
body=HercBody.CRIT,
hands=HercHands.TA,
legs=HercLegs.TA,
feet=HercFeet.TA,
neck="Erudition necklace",
waist="Windbuffet Belt +1",
left_ear="Brutal Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.HighAcc.MaxHaste = {ammo="Togakushi Shuriken",
head=HercHead.ACC,
body=HercBody.CRIT,
hands=HercHands.ACC,
legs=HercLegs.ACC,
feet=HercFeet.CRITACC,
neck="Subtlety Spec.",
waist="Kentarch Belt +1",
left_ear="Mache Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Cacoethic Ring",
back=Andartia.DA}
sets.engaged.Evasion.MaxHaste = {}
sets.engaged.Acc.Evasion.MaxHaste = {}
sets.engaged.PDT.MaxHaste = {}
sets.engaged.Acc.PDT.MaxHaste = {}
--------------------------------------
-- Custom buff sets
--------------------------------------
sets.buff.Migawari = {}
sets.buff.Doom = {waist="Gishdubar sash",ring1="Saida Ring",ring2="Saida Ring"}
sets.buff.Yonin = {}
sets.buff.Innin = {}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_aftercast(spell, action, spellMap, eventArgs)
if not spell.interrupted and spell.english == "Migawari: Ichi" then
state.Buff.Migawari = true
end
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
function job_buff_change(buff, gain)
if S{'haste', 'march', 'mighty guard', 'embrava', 'haste samba', 'geo-haste', 'indi-haste'}:contains(buff:lower()) then
determine_haste_group()
handle_equipping_gear(player.status)
elseif state.Buff[buff] ~= nil then
handle_equipping_gear(player.status)
end
end
function job_status_change(new_status, old_status)
if new_status == 'Idle' then
select_movement_feet()
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Get custom spell maps
function job_get_spell_map(spell, default_spell_map)
if spell.skill == "Ninjutsu" then
if not default_spell_map then
if spell.target.type == 'SELF' then
return 'NinjutsuBuff'
else
return 'NinjutsuDebuff'
end
end
end
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if state.Buff.Migawari then
idleSet = set_combine(idleSet, sets.buff.Migawari)
end
if state.Buff.Doom then
idleSet = set_combine(idleSet, sets.buff.Doom)
end
return idleSet
end
-- Modify the default melee set after it was constructed.
function customize_melee_set(meleeSet)
if state.Buff.Migawari then
meleeSet = set_combine(meleeSet, sets.buff.Migawari)
end
if state.Buff.Doom then
meleeSet = set_combine(meleeSet, sets.buff.Doom)
end
return meleeSet
end
-- Called by the default 'update' self-command.
function job_update(cmdParams, eventArgs)
select_movement_feet()
determine_haste_group()
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
--function determine_haste_group()
-- classes.CustomMeleeGroups:clear()
-- if buffactive.embrava and (buffactive.march == 2 or (buffactive.march and buffactive.haste)) then
-- classes.CustomMeleeGroups:append('MaxHaste')
-- elseif buffactive.march == 2 and buffactive.haste then
-- classes.CustomMeleeGroups:append('MaxHaste')
-- elseif buffactive.embrava and (buffactive.haste or buffactive.march) then
-- classes.CustomMeleeGroups:append('Haste_35')
-- elseif buffactive.haste then
-- classes.CustomMeleeGroups:append('HighHaste')
-- elseif buffactive.march == 2 then
-- classes.CustomMeleeGroups:append('HighHaste')
-- elseif buffactive.march == 1 and buffactive['haste samba'] then
-- classes.CustomMeleeGroups:append('HighHaste')
-- end
--end
function determine_haste_group()
classes.CustomMeleeGroups:clear()
-- assuming +4 for marches (ghorn has +5)
-- Haste (white magic) 15%
-- Haste Samba (Sub) 5%
-- Haste (Merited DNC) 10% (never account for this)
-- Victory March +0/+3/+4/+5 9.4/14%/15.6%/17.1% +0
-- Advancing March +0/+3/+4/+5 6.3/10.9%/12.5%/14% +0
-- Embrava 30% with 500 enhancing skill
-- Mighty Guard - 15%
-- buffactive[580] = geo haste
-- buffactive[33] = regular haste
-- buffactive[604] = mighty guard
-- state.HasteMode = toggle for when you know Haste II is being cast on you
-- Hi = Haste II is being cast. This is clunky to use when both haste II and haste I are being cast
if state.HasteMode.value == 'Hi' then
if ( ( (buffactive[33] or buffactive[580] or buffactive.embrava) and (buffactive.march or buffactive[604]) ) or
( buffactive[33] and (buffactive[580] or buffactive.embrava) ) or
( buffactive.march == 2 and buffactive[604] ) ) then
add_to_chat(8, '-------------Max-Haste Mode Enabled--------------')
classes.CustomMeleeGroups:append('MaxHaste')
elseif ( (buffactive[33] or buffactive.march == 2 or buffactive[580]) and buffactive['haste samba'] ) then
add_to_chat(8, '-------------Haste 35%-------------')
classes.CustomMeleeGroups:append('Haste_35')
elseif ( ( buffactive[580] or buffactive[33] or buffactive.march == 2 ) or
( buffactive.march == 1 and buffactive[604] ) ) then
add_to_chat(8, '-------------Haste 30%-------------')
classes.CustomMeleeGroups:append('Haste_30')
elseif ( buffactive.march == 1 or buffactive[604] ) then
add_to_chat(8, '-------------Haste 15%-------------')
classes.CustomMeleeGroups:append('Haste_15')
end
else
if ( buffactive[580] and ( buffactive.march or buffactive[33] or buffactive.embrava or buffactive[604]) ) or -- geo haste + anything
( buffactive.embrava and (buffactive.march or buffactive[33] or buffactive[604]) ) or -- embrava + anything
( buffactive.march == 2 and (buffactive[33] or buffactive[604]) ) or -- two marches + anything
( buffactive[33] and buffactive[604] and buffactive.march ) then -- haste + mighty guard + any marches
add_to_chat(8, '-------------Max Haste Mode Enabled--------------')
classes.CustomMeleeGroups:append('MaxHaste')
elseif ( (buffactive[604] or buffactive[33]) and buffactive['haste samba'] and buffactive.march == 1) or -- MG or haste + samba with 1 march
( buffactive.march == 2 and buffactive['haste samba'] ) or
( buffactive[580] and buffactive['haste samba'] ) then
add_to_chat(8, '-------------Haste 35%-------------')
classes.CustomMeleeGroups:append('Haste_35')
elseif ( buffactive.march == 2 ) or -- two marches from ghorn
( (buffactive[33] or buffactive[604]) and buffactive.march == 1 ) or -- MG or haste + 1 march
( buffactive[580] ) or -- geo haste
( buffactive[33] and buffactive[604] ) then -- haste with MG
add_to_chat(8, '-------------Haste 30%-------------')
classes.CustomMeleeGroups:append('Haste_30')
elseif buffactive[33] or buffactive[604] or buffactive.march == 1 then
add_to_chat(8, '-------------Haste 15%-------------')
classes.CustomMeleeGroups:append('Haste_15')
end
end
end
function select_movement_feet()
if world.time >= 17*60 or world.time < 7*60 then
gear.MovementFeet.name = gear.NightFeet
else
gear.MovementFeet.name = gear.DayFeet
end
end
function job_post_precast(spell, action, spellMap, eventArgs)
if spell.type == 'WeaponSkill' then
if world.time >= 17*60 or world.time < 7*60 then -- Dusk to Genmei time.
equip({ear1="Lugra Earring +1", ear2="Lugra Earring"})
end
end
end
function job_post_precast(spell, action, spellMap, eventArgs)
if spellMap == 'ElementalNinjutsu' then
if spell.english:contains(': San') then
equip({feet="Mochi. Kyahan +1"})
end
end
end
function job_post_midcast(spell, action, spellMap, eventArgs)
if spellMap == 'ElementalNinjutsu' then
if spell.english:contains(': San') then
equip({head="Mochi. Hatsuburi +1"})
end
if spell.element == world.day_element or spell.element == world.weather_element then
equip({waist="Hachirin-no-Obi"})
end
if state.Buff.Futae then
equip(sets.precast.JA['Futae'])
end
if state.Buff.Doom then
equip(sets.buff.Doom)
end
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'DNC' then
set_macro_page(1, 4)
elseif player.sub_job == 'WAR' then
set_macro_page(2, 4)
elseif player.sub_job == 'RUN' then
set_macro_page(3, 4)
elseif player.sub_job == 'RDM' then
set_macro_page(4, 4)
else
set_macro_page(1, 4)
end
end
Quetzalcoatl.Trulusia
Server: Quetzalcoatl
Game: FFXI
Posts: 1132
By Quetzalcoatl.Trulusia 2016-09-20 07:05:53
Gearswap usually tells you what the error actually is. Do you remember what it said?
Asura.Chiaia
VIP
Server: Asura
Game: FFXI
Posts: 1656
By Asura.Chiaia 2016-09-20 08:53:43
@Azagarth
Embrava is 266/1024 @ 500 skill BTW 25.9%~ not 30. Just figured I'd point it out because a lot of people thought it was 25% flat then I noticed it wasn't and then saw 30% or your GS >.>
By eliroo 2016-09-20 09:59:47
For the sake of saving time is there a table that shows how much DW you need to cap given certain haste %s?
If not, I can work it out myself.
Quetzalcoatl.Langly
Server: Quetzalcoatl
Game: FFXI
Posts: 684
By Quetzalcoatl.Langly 2016-09-20 10:14:07
For the sake of saving time is there a table that shows how much DW you need to cap given certain haste %s?
If not, I can work it out myself.
No table that I'm aware of. Just use the ol equation.
Necessary DW = 1 - (0.2 / (1 - TotalHaste%))
[+]
By eliroo 2016-09-20 10:25:56
Quetzalcoatl.Langly said: »For the sake of saving time is there a table that shows how much DW you need to cap given certain haste %s?
If not, I can work it out myself.
No table that I'm aware of. Just use the ol equation.
Necessary DW = 1 - (0.2 / (1 - TotalHaste%))
So using this formula, assuming Gear haste is additive
No Haste
1 - (0.2 / (1 - .26 )) = 72% DW needed - 37 DW on Gear needed
Haste 1
1 - (0.2 / (1 - .41 )) = 66% DW needed - 31 DW on Gear needed
Haste 2
1 - (0.2 / (1 - .56 )) = 54% DW needed - 19 DW on Gear needed
35 Haste
1 - (0.2 / (1 - .61 )) = 48% DW Needed - 13 DW on Gear needed
Max Haste
1 - (0.2 / (1 - .71 )) = 31 % DW Needed - (-4) DW on Gear needed
Is that correct?
[+]
By Verda 2016-09-20 10:36:23
I've already been through all of this for THF, so hopefully this saves people some work. I don't like doing lots of sets I feel it is hard to maintain so use modifiers on my engaged/melee set with customize_melee_set instead. Then the order I put those rules will determine which takes slot priorities and I don't have nearly as many sets, just rules for how to combine them. Example: if you want light DT mode while haste capped, it'll replace you engaged sets with first haste then light dt. I make it work the same way for accuracy, so you can have a modifier for haste, accuracy, damagetaken, ranged weapon, damage type (can switch out to h2h, clubs, etc), on hits (like thf TH), or melee in you cp cape to take examples of what I did for THF. Below is just the stripped out for only haste parts. I'll be updating the lua with the rest my changes as I'm able to make them. Right now I'm mostly just skilling up (got katana, GKT, throwing, ninjitsu maxed now :D) I'll post the full lua when it's tested and done though. Note my engaged set will have haste capped setup in it.
Code
--Some Global Variables
hastetype=1
hastesambatype=0
hastetbl = S{'haste','march','geo-haste','indi-haste','embrava','haste samba','aftermath','mighty guard'}
function user_setup()
state.hastemode = M{['description'] = 'Haste Mode'}
state.hastemode:options('NoHaste','HasteI','HasteII','Capped')
--Binds--
send_command('bind ^q gs c hastetype')
send_command('bind @q gs c hastesambatype')
end
function customize_melee_set(meleeSet)
meleeSet = set_combine(meleeSet,sets.hastemode[state.hastemode.value])
end
function job_self_command(cmdParams,eventArgs)
command = cmdParams[1]:lower()
if command=='hastetype' then
if hastetype == 1 then hastetype=2
else hastetype = 1 end
add_to_chat(122,'Haste '..hastetype)
check_haste_level()
handle_equipping_gear(player.status)
elseif command=='hastesambatype' then
if hastesambatype == 0 then hastesambatype=1
elseif hastesambatype == 1 then hastesambatype = 2
else hastesambatype = 0 end
add_to_chat(122,'Hastesambatype '..hastesambatype)
end
end
function check_haste_level()
--pr(buffactive)
--33 is haste 1 and haste 2 580 is indi and geo haste
hastelevel = 0
if buffactive[33] and hastetype==1 then
hastelevel=hastelevel+15
add_to_chat(122,'Haste I detected')
elseif buffactive[33] and hastetype==2 then
hastelevel=hastelevel+30
add_to_chat(122,'Haste II detected')
end
if hastesambatype==1 then
hastelevel=hastelevel+5
add_to_chat(122,'Haste samba detected')
end
if hastesambatype==2 then
hastelevel=hastelevel+10
add_to_chat(122,'Haste samba (dnc) detected')
end
if buffactive[580] then --assuming non idris, indi/geo haste
hastelevel=hastelevel+33
--add_to_chat(122,'Geo Haste detected')
end
if buffactive['Mighty Guard'] then
hastelevel=hastelevel+15
--add_to_chat(122,'Mighty Guard detected')
end
if buffactive['slow'] then
hastelevel=hastelevel-30
add_to_chat(122,'Slow Detected')
end
if buffactive['Embrava'] then
hastelevel=hastelevel+25
end
if buffactive.march ==2 then --assuming song +3 at least
hastelevel=hastelevel+25
elseif buffactive.march ==1 then
hastelevel=hastelevel+15
elseif buffactive.march > 2 then
hastelevel=hastelevel+40
end
add_to_chat(122,'Haste level '..hastelevel)
if hastelevel == 0 then
add_to_chat(122,'Haste level set to NoHaste')
state.hastemode:set('NoHaste')
elseif hastelevel >= 40 then
add_to_chat(122,'Haste level set to Capped')
state.hastemode:set('Capped')
elseif hastelevel >= 25 then
add_to_chat(122,'Haste level set to HasteII')
state.hastemode:set('HasteII')
elseif hastelevel >= 15 then
add_to_chat(122,'Haste level set to HasteI')
state.hastemode:set('HasteI')
end
end
function job_buff_change(buff, gain)
buff_lower = buff:lower()
if hastetbl:contains(buff_lower) then
check_haste_level()
handle_equipping_gear(player.status)
elseif state.Buff[buff] ~= nil then
handle_equipping_gear(player.status)
end
end
function init_gear_sets()
--(1 - 35% Dual Wield)×(1024 - 256 Equipment Haste - 150 Magic Haste - 101 Job Ability Haste)÷1024 = 32.8% Delay remaining, or 67.18% Delay reduction
--(.65)×(1024 - 256 Equipment Haste)÷1024 = 48.75% Delay remaining, or 51.25% Delay reduction
--(.65)×(768)÷1024 = 48.75% Delay remaining, or 51.25% Delay reduction
--(.65)×(768)÷1024 = .4875
ah_body={ name="Adhemar Jacket", augments={'DEX+10','AGI+10','Accuracy+15',}}
floral={ name="Floral Gauntlets", augments={'Rng.Acc.+13','Accuracy+14','"Triple Atk."+1','Magic dmg. taken -2%',}}
dw_legs ={ name="Taeon Tights", augments={'Accuracy+17 Attack+17','"Dual Wield"+4','STR+2 DEX+2',}}
dw_feet ={ name="Taeon Boots", augments={'Accuracy+17 Attack+17','"Dual Wield"+5','STR+4 DEX+4',}}
sets.hastemode = {}
--(.26)×(.75) = .195, .65 - .26 = 39
sets.hastemode.NoHaste={ -- need 39, at 39
hands=floral, --5
body=ah_body,--5, 6 with HQ
ear1="Eabani Earring",--4
ear2="Suppanomimi",--5
waist="Reiki Yotai",--7
legs=dw_legs, --4
feet=dw_feet, --9
}
--(.65)×(618/1024) = .3922
--(.33)×(618/1024) = .1991, .65 - .33 = 32
sets.hastemode.HasteI={ -- need 32, at 32
body=ah_body,--5
hands=floral,--5
ear1="Eabani Earring",--4
ear2="Suppanomimi",--5
--waist="Reiki Yotai",--7
legs=dw_legs, --4
feet=dw_feet, --9
}
--(.65)×(468/1024) = .2970
--(.43)×(468/1024) = .1965, .65 - .43 = 22
sets.hastemode.HasteII={ -- need 22, at 22
body=ah_body,--5
hands=floral,--5
--ear1="Eabani Earring",--4
ear2="Suppanomimi",--5
waist="Reiki Yotai",--7
}
sets.hastemode.NoHaste=set_combine(sets.engaged,sets.hastemode.NoHaste)
sets.hastemode.HasteI=set_combine(sets.engaged,sets.hastemode.HasteI)
sets.hastemode.HasteII=set_combine(sets.engaged,sets.hastemode.HasteII)
sets.hastemode.Capped=set_combine(sets.engaged,{})
end
Most of my questions for NIN will regard tanking on NIN as I have never played a tank job before. So I hope you guys are willing to field these questions thanks:
1) Is yonin enmity JA enmity or gear enmity, assuming JA but want to make sure.
2) How does JA enmity and Gear enmity and merit enmity stack and is merit enmity considered gear enmity? Is it multiplicative or additive for enmity from JA and gear?
3) Is it ever worth it to WS in a +enmity set on NIN/can you actually result in more enmity gained that way?
4) what spells are spammable on NIN for enmity under which conditions, and if an enfeeble spell doesn't land will you still get enmity from it and will you get as much? I know there was a yonin update for utsusemi enmity but wanted to know if there is anything else the guide says a lot of JA have 1 enmity?
5) If you have +enmity on and take a lot of damage, does it actually make you lose more enmity...?
6) For tanking mobs with magic AoE would you use an mdt katana? What about breath? What are the best setups for magical and breath damage taken?
7) Gear enmity supposedly caps at 200, can NIN reach that? Can you provide a max enmity set and are there any compromise pieces that have additional stats but also less enmity?
8) How important is a full spell interupt set for NIN and can they reach the cap easily? If so what is the spell interupt gear?
9) Have you tanked anything ilvl 135+ on NIN and if so what? Can you share your experiences/gear choices?
10) How useful are the elemental resistance down aspects of ninjitsu for mana burn setups? I'm not expecting something like rayke which lowers mob family resistances but was it ever quantified how much macc it would add or how long it lasts?
[+]
Quetzalcoatl.Langly
Server: Quetzalcoatl
Game: FFXI
Posts: 684
By Quetzalcoatl.Langly 2016-09-20 11:15:42
Max Haste
1 - (0.2 / (1 - .71 )) = 31 % DW Needed - (-4) DW on Gear needed
Unsure how you arrive at .71% max haste. Capped Magical haste is 448/1024 and capped gear haste is 256/1024. Putting you at 68.75. Did you do some funky rounding on your Max Haste?
Quetzalcoatl.Langly
Server: Quetzalcoatl
Game: FFXI
Posts: 684
By Quetzalcoatl.Langly 2016-09-20 11:28:53
1) Is yonin enmity JA enmity or gear enmity, assuming JA but want to make sure. Last I knew when the JA was added, Yonin acted like gear Enmity, and subsequently was limited to the gear enmity cap.
2) How does JA enmity and Gear enmity and merit enmity stack and is merit enmity considered gear enmity? Is it multiplicative or additive for enmity from JA and gear? With the recent changes made to enmity (in regards to the games entire life) the particulars are unknown. It's believed gear enmity will cap upwards of +200 and JA enmity will augment this total.
3) Is it ever worth it to WS in a +enmity set on NIN/can you actually result in more enmity gained that way? I don't believe so.
4) what spells are spammable on NIN for enmity under which conditions, and if an enfeeble spell doesn't land will you still get enmity from it and will you get as much? I know there was a yonin update for utsusemi enmity but wanted to know if there is anything else the guide says a lot of JA have 1 enmity? Usually a spell from a subjob with much larger values of CE and VE. Flash and Stun were and are still quite popular. Stun less-so if you're concerned with anything building resistances. I've actually taken a liking to NIN/RUN for this purpose.
5) If you have +enmity on and take a lot of damage, does it actually make you lose more enmity...? I believe it has more to do with your Maximum HP affecting how much enmity is lost when taking damage. Though this equation I'm not particularly familiar with. Probably something available on the BG-Wiki entry for Enmity.
More of my opinions when I finish with my meeting here at work~
Siren.Kyte
Server: Siren
Game: FFXI
Posts: 3332
By Siren.Kyte 2016-09-20 11:32:52
Higher HP does reduce CE decay, but so does +enmity.
[+]
By eliroo 2016-09-20 12:11:53
Quetzalcoatl.Langly said: »Max Haste
1 - (0.2 / (1 - .71 )) = 31 % DW Needed - (-4) DW on Gear needed
Unsure how you arrive at .71% max haste. Capped Magical haste is 448/1024 and capped gear haste is 256/1024. Putting you at 68.75. Did you do some funky rounding on your Max Haste?
I added base amounts and not the x/1024 % so 15+30+26 instead of the proper percentages, so basically I did round.
Side Question:
Shuriken TP formula: Is that calculated based off just the shuriken delay?
Like Happo w/ 192 delay generates 63 TP per throw? Or am I missing something
Server: Asura
Game: FFXI
Posts: 1326
By Asura.Azagarth 2016-09-20 16:16:35
Quetzalcoatl.Trulusia said: »Gearswap usually tells you what the error actually is. Do you remember what it said?
lua runtime error GearSwap/flow.lua 336
error in the user function get_sets
then my lua 662 attempt to index field 'HasteMode' (a nil value)
not word for word but that is the jist. I have been trying to get it to work I just have no clue at this point.
my lua
Code -------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
include('Include/AugmentedGear.lua')
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.Buff.Migawari = buffactive.migawari or false
state.Buff.Doom = buffactive.doom or false
state.Buff.Yonin = buffactive.Yonin or false
state.Buff.Innin = buffactive.Innin or false
state.Buff.Futae = buffactive.Futae or false
determine_haste_group()
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job. Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
state.HasteMode = M{['description']='Haste Mode', 'Normal', 'Hi'}
state.OffenseMode:options('Normal', 'Acc', 'HighAcc')
state.HybridMode:options('Normal', 'Evasion', 'PDT')
state.WeaponskillMode:options('Normal', 'Acc', 'Mod')
state.CastingMode:options( 'MAB', 'Normal')
state.PhysicalDefenseMode:options('PDT', 'MDT')
gear.MovementFeet = {name="Hachiya Kyahan +1"}
gear.DayFeet = "Rao sune-ate"
gear.NightFeet = "Hachiya Kyahan +1"
select_movement_feet()
select_default_macro_book()
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Precast sets
--------------------------------------
Andartia={}
Andartia.MAB={ name="Andartia's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','"Mag.Atk.Bns."+10',}}
Andartia.DA= { name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}}
Andartia.WSD= { name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Weapon skill damage +10%',}}
-- Precast sets to enhance JAs
sets.precast.JA['Mijin Gakure'] = {legs="Mochizuki Hakama"}
sets.precast.JA['Futae'] = {Hands="Hattori Tekko +1"}
sets.precast.JA['Sange'] = {legs="Mochizuki Chainmail +1"}
-- Waltz set (chr and vit)
sets.precast.Waltz = {}
-- Don't need any special gear for Healing Waltz.
sets.precast.Waltz['Healing Waltz'] = {}
-- Set for acc on steps, since Yonin drops acc a fair bit
sets.precast.Step = {neck="Subtlety Spec."}
sets.precast.Flourish1 = {waist="Chaac Belt"}
-- Fast cast sets for spells
sets.precast.FC = {
ammo="Staunch Tathlum",
head=HercHead.TA,
body="Foppish Tunica",
hands="Leyline Gloves",
legs=HercLegs.FC,
feet=HercFeet.FC,
neck="Willpower Torque",
waist="Druid's Rope",
left_ear="Halasz Earring",
right_ear="Loquac. Earring",
left_ring="Prolix Ring",
right_ring="Defending Ring",
back="Mujin Mantle",
}
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {
neck="Magoraga Beads",
body="Mochi. Chainmail +1",})
-- Snapshot for ranged
sets.precast.RA = {}
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {ammo="Seething bomblet",
head=HercHead.TA,
body=HercBody.WSD,
hands=HercHands.WSD,
legs="Hiza. Hizayoroi +1",
feet=HercFeet.WSD,
neck="Fotia Gorget",
waist="Windbuffet Belt +1",
left_ear="Brutal Earring",
right_ear="Cessance Earring",
left_ring="Epona's Ring",
right_ring="Apate Ring",
back=Andartia.WSD}
sets.precast.WS.Acc = set_combine(sets.precast.WS, {ammo="Seething bomblet",
head=HercHead.ACC,
body=HercBody.WSD,
hands=HercHands.ACC,
legs="Hiza. Hizayoroi +1",
feet=HercFeet.CRITACC,
neck="Fotia Gorget",
waist="Grunfeld Belt",
left_ear="Mache Earring",
right_ear="Cessance Earring",
left_ring="Epona's Ring",
right_ring="Apate Ring",
back=Andartia.WSD})
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
sets.precast.WS['Blade: Ten'] = set_combine(sets.precast.WS,
{ammo="Seething bomblet",
head="Lilitu headpiece",
neck="Caro necklace",
hands=HercHands.WSD,
waist="Grunfeld rope",
body=HercBody.WSD,
legs="Hiza. Hizayoroi +1",
feet=HercFeet.WSD,
left_ear="Mache Earring",
left_ring="Ifrit Ring +1",
right_ring="Ifrit Ring +1"})
sets.precast.WS['Blade: Shun'] = set_combine(sets.precast.WS,
{ head="Lilitu headpiece",
body={ name="Adhemar Jacket", augments={'DEX+10','AGI+10','Accuracy+15',}},
hands=HercHands.ACC,
legs="Samnuha tights",
feet=HercFeet.CRITACC,
waist="Thunder belt",
back=Andartia.DA,
right_ring="Ramuh Ring"})
sets.precast.WS['Blade: Metsu'] = set_combine(sets.precast.WS,
{ ammo="Jukukik feather",
head="Lilitu headpiece",
neck="Caro necklace",
body=HercBody.WSD,
hands=HercHands.WSD,
legs=HercLegs.WSD,
left_ear="Mache Earring",
right_ear="Mache Earring",
feet=HercFeet.WSD,
waist="Grunfeld rope",
right_ring="Ramuh Ring",
left_ring="Ramuh Ring"})
sets.precast.WS['Blade: Hi'] = {
ammo="Yetshila",
head={ name="Adhemar Bonnet", augments={'DEX+10','AGI+10','Accuracy+15',}},
body="Abnoba Kaftan",
hands={ name="Ryuo Tekko", augments={'DEX+10','Accuracy+20','"Dbl.Atk."+3',}},
legs=HercLegs.CRIT,
feet=HercFeet.CRIT,
neck="Rancor Collar",
waist="Windbuffet Belt +1",
left_ear="Brutal Earring",
right_ear="Cessance Earring",
left_ring="Epona's Ring",
right_ring="Apate Ring",
back=Andartia.WSD}
--------------------------------------
-- Midcast sets
--------------------------------------
sets.midcast.FastRecast = {
ear2="Loquacious Earring",ring1="Prolix Ring"}
sets.midcast.SelfNinjutsu = {ammo="Staunch Tathlum",
head="Hachiya hatsuburi +1",
body="Foppish Tunica",
hands="Rawhide Gloves",
legs=HercLegs.FC,
feet="Mochi. Kyahan +1",
neck="Willpower Torque",
waist="Druid's Rope",
left_ear="Stealth Earring",
right_ear="Loquac. Earring",
left_ring="Prolix Ring",
right_ring="Evanescence Ring",
back="Mujin Mantle",}
sets.midcast.Utsusemi = set_combine(sets.midcast.SelfNinjutsu, {
ammo="Staunch Tathlum",
head=HercHead.TA,
body="Foppish Tunica",
hands="Leyline Gloves",
legs=HercLegs.FC,
neck="Willpower Torque",
waist="Druid's Rope",
left_ear="Halasz Earring",
right_ear="Loquac. Earring",
left_ring="Prolix Ring",
right_ring="Defending Ring",
feet="Hattori Kyahan",
back=Andartia.DA})
sets.midcast.ElementalNinjutsu = {
ammo="Ghastly Tathlum",
head=HercHead.MAB,
body="Samnuha coat",
Hands="Leyline gloves",
legs=HercLegs.MAB,
feet=HercFeet.MBD,
neck="Sanctity necklace",
waist="Cimmerian sash",
left_ear="Friomisi Earring", right_ear="Static Earring",
left_ring="Stikini Ring", right_ring="Stikini Ring",
back=Andartia.MAB,}
sets.midcast.ElementalNinjutsu.MAB = {
ammo="Ghastly Tathlum",
head=HercHead.MAB,
body="Samnuha coat",
Hands="Leyline gloves",
legs=HercLegs.MAB,
feet=HercFeet.MBD,
neck="Sanctity necklace",
waist="Cimmerian sash",
left_ear="Friomisi Earring", right_ear="Static Earring",
left_ring="Locus Ring", right_ring="Mujin Band",
back=Andartia.MAB,}
sets.midcast.NinjutsuDebuff = {
ammo="Hydrocera",
head="Hachi. Hatsu. +1",
body="Samnuha coat",
hands=HercHands.MACC,
legs=HercLegs.MAB,
feet=HercFeet.MAB,
neck="Ninjutsu Torque",
waist="Ovate rope",
left_ear="Stealth Earring", right_ear="Ninjutsu Earring",
left_ring="Stikini Ring", right_ring="Stikini Ring",
back=Andartia.MAB,}
sets.midcast.NinjutsuBuff = {
ammo="Staunch Tathlum",
head="Hachiya hatsuburi +1",
body="Foppish Tunica",
hands="Rawhide Gloves",
legs="Wukong's Haka. +1",
feet="Mochi. Kyahan +1",
neck="Ninjutsu Torque",
waist="Cimmerian Rope",
left_ear="Stealth Earring",
right_ear="Ninjutsu Earring",
left_ring="Stikini Ring",
right_ring="Stikini Ring",
back="Mujin Mantle",}
sets.midcast.RA = {}
--------------------------------------
-- Idle/resting/defense/etc sets
--------------------------------------
-- Resting sets
sets.resting = {ammo="Staunch Tathlum",
head="Rao kabuto",
body="Hizamaru haramaki +1",
hands="Rao kote",
legs={ name="Rao Haidate", augments={'Accuracy+20','"Dbl.Atk."+3','Pet: Accuracy+20',}},
feet=gear.MovementFeet,
neck="Sanctity necklace",
waist="Flume Belt",
left_ear="Infused Earring", right_ear="Genmei Earring",
left_ring="Shneddick Ring",
right_ring="Defending Ring",
back="Shadow mantle"}
-- Idle sets
sets.idle = {ammo="Staunch Tathlum",
head="Rao kabuto",
body="Hizamaru haramaki +1",
hands="Rao kote",
legs={ name="Rao Haidate", augments={'Accuracy+20','"Dbl.Atk."+3','Pet: Accuracy+20',}},
feet=gear.MovementFeet,
neck="Sanctity necklace",
waist="Flume Belt",
left_ear="Infused Earring", right_ear="Genmei Earring",
left_ring="Shneddick Ring",
right_ring="Defending Ring",
back="Shadow mantle"}
sets.idle.Town = {ammo="Staunch Tathlum",
head="Rao kabuto",
body="Hizamaru haramaki +1",
hands="Rao kote",
legs="Rao Haidate",
feet=gear.MovementFeet,
neck="Sanctity necklace",
waist="Flume Belt",
left_ear="Infused Earring", right_ear="Genmei Earring",
left_ring="Shneddick Ring",
right_ring="Defending Ring",
back="Shadow mantle"}
sets.idle.Weak = {ammo="Staunch Tathlum",
head="Rao kabuto",
body="Hizamaru haramaki +1",
hands="Rao kote",
legs="Rao Haidate",
feet=gear.MovementFeet,
neck="Sanctity necklace",
waist="Flume Belt",
left_ear="Infused Earring", right_ear="Genmei Earring",
left_ring="Shneddick Ring",
right_ring="Defending Ring",
back="Shadow mantle"}
-- Defense sets
sets.defense.Evasion = {neck="Subtlety Spec.", back="Yokaze Mantle"}
sets.defense.PDT = {
ammo="Togakushi Shuriken",
head="Ryuo Somen",
body="Emet Harness +1",
hands=HercHands.PDT,
legs=HercLegs.DT,
feet=HercFeet.DT,
neck="Loricate Torque",
waist="Flume Belt",
left_ear="Genmei Earring",
right_ear="Suppanomimi",
left_ring="Gelatinous Ring +1",
right_ring="Defending Ring",
back="Solemnity Cape",
}
sets.defense.MDT = {
ammo="Togakushi Shuriken",
head="Dampening Tam",
body="Hiza. Haramaki +1",
hands="Floral Gauntlets",
legs=HercLegs.DT,
feet=HercFeet.DT,
neck="Loricate Torque",
waist="Flume Belt",
left_ear="Brutal Earring",
right_ear="Static Earring",
left_ring="Shadow Ring",
right_ring="Defending Ring",
back="Solemnity Cape",
}
sets.Kiting = {left_ring="Shneddick Ring",feet=gear.MovementFeet}
--------------------------------------
-- Engaged sets
--------------------------------------
-- Normal melee group
sets.engaged = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs="Samnuha tights",
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Patentia sash",
left_ear="Brutal Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.Acc = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs=HercLegs.TA,
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Patentia sash",
left_ear="Brutal Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.HighAcc = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs=HercLegs.ACC,
feet="Hiza. Sune-Ate +1",
neck="Subtlety Spec.",
waist="Patentia sash",
left_ear="Cessance Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Cacoethic Ring",
back=Andartia.DA}
sets.engaged.Evasion = {}
sets.engaged.Acc.Evasion = {}
sets.engaged.PDT = {}
sets.engaged.Acc.PDT = {}
sets.engaged.Haste_15 = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs="Samnuha tights",
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Patentia sash",
left_ear="Brutal Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.Acc.Haste_15 = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs=HercLegs.TA,
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Patentia sash",
left_ear="Brutal Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.HighAcc.Haste_15 = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands="Floral gauntlets",
legs=HercLegs.ACC,
feet="Hiza. Sune-Ate +1",
neck="Subtlety Spec.",
waist="Patentia sash",
left_ear="Cessance Earring", right_ear="Suppanomimi",
left_ring="Epona's Ring", right_ring="Cacoethic Ring",
back=Andartia.DA}
sets.engaged.Evasion.Haste_15 = {}
sets.engaged.Acc.Evasion.Haste_15 = {}
sets.engaged.PDT.Haste_15 = {}
sets.engaged.Acc.PDT.Haste_15 = {}
-- Custom melee group: High Haste (~20% DW)
sets.engaged.Haste_30 = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands=HercHands.TA,
legs=HercLegs.TA,
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Windbuffet belt +1",
left_ear="Brutal Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.Acc.Haste_30 = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands=HercHands.TA,
legs=HercLegs.TA,
feet="Hiza. Sune-Ate +1",
neck="Erudition necklace",
waist="Windbuffet belt +1",
left_ear="Brutal Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.HighAcc.Haste_30 = {ammo="Togakushi Shuriken",
head="Ryuo somen",
body="Adhemar Jacket",
hands=HercHands.ACC,
legs=HercLegs.ACC,
feet="Hiza. Sune-Ate +1",
neck="Subtlety Spec.",
waist="Kentarch belt +1",
left_ear="Cessance Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Cacoethic Ring",
back=Andartia.DA}
sets.engaged.Evasion.Haste_30 = {}
sets.engaged.Acc.Evasion.Haste_30 = {}
sets.engaged.PDT.Haste_30 = {}
sets.engaged.Acc.PDT.Haste_30 = {}
-- Custom melee group: Embrava Haste (7% DW)
sets.engaged.Haste_35 = {}
sets.engaged.HighAcc.Haste_35 = {}
sets.engaged.Acc.Haste_35= {}
sets.engaged.Evasion.Haste_35 = {}
sets.engaged.Acc.Evasion.Haste_35 = {}
sets.engaged.PDT.Haste_35 = {}
sets.engaged.Acc.PDT.Haste_35 = {}
-- Custom melee group: Max Haste (0% DW)
sets.engaged.MaxHaste = {ammo="Togakushi Shuriken",
head="Adhemar bonnet",
body=HercBody.CRIT,
hands=HercHands.TA,
legs=HercLegs.TA,
feet=HercFeet.TA,
neck="Erudition necklace",
waist="Windbuffet Belt +1",
left_ear="Brutal Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.Acc.MaxHaste = {ammo="Togakushi Shuriken",
head=HercHead.TA,
body=HercBody.CRIT,
hands=HercHands.TA,
legs=HercLegs.TA,
feet=HercFeet.TA,
neck="Erudition necklace",
waist="Windbuffet Belt +1",
left_ear="Brutal Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Petrov Ring",
back=Andartia.DA}
sets.engaged.HighAcc.MaxHaste = {ammo="Togakushi Shuriken",
head=HercHead.ACC,
body=HercBody.CRIT,
hands=HercHands.ACC,
legs=HercLegs.ACC,
feet=HercFeet.CRITACC,
neck="Subtlety Spec.",
waist="Kentarch Belt +1",
left_ear="Mache Earring", right_ear="Cessance earring",
left_ring="Epona's Ring", right_ring="Cacoethic Ring",
back=Andartia.DA}
sets.engaged.Evasion.MaxHaste = {}
sets.engaged.Acc.Evasion.MaxHaste = {}
sets.engaged.PDT.MaxHaste = {}
sets.engaged.Acc.PDT.MaxHaste = {}
--------------------------------------
-- Custom buff sets
--------------------------------------
sets.buff.Migawari = {}
sets.buff.Doom = {waist="Gishdubar sash",ring1="Saida Ring",ring2="Saida Ring"}
sets.buff.Yonin = {}
sets.buff.Innin = {}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_aftercast(spell, action, spellMap, eventArgs)
if not spell.interrupted and spell.english == "Migawari: Ichi" then
state.Buff.Migawari = true
end
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
function job_buff_change(buff, gain)
if S{'haste', 'march', 'mighty guard', 'embrava', 'haste samba', 'geo-haste', 'indi-haste'}:contains(buff:lower()) then
determine_haste_group()
handle_equipping_gear(player.status)
elseif state.Buff[buff] ~= nil then
handle_equipping_gear(player.status)
end
end
function job_status_change(new_status, old_status)
if new_status == 'Idle' then
select_movement_feet()
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Get custom spell maps
function job_get_spell_map(spell, default_spell_map)
if spell.skill == "Ninjutsu" then
if not default_spell_map then
if spell.target.type == 'SELF' then
return 'NinjutsuBuff'
else
return 'NinjutsuDebuff'
end
end
end
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if state.Buff.Migawari then
idleSet = set_combine(idleSet, sets.buff.Migawari)
end
if state.Buff.Doom then
idleSet = set_combine(idleSet, sets.buff.Doom)
end
return idleSet
end
-- Modify the default melee set after it was constructed.
function customize_melee_set(meleeSet)
if state.Buff.Migawari then
meleeSet = set_combine(meleeSet, sets.buff.Migawari)
end
if state.Buff.Doom then
meleeSet = set_combine(meleeSet, sets.buff.Doom)
end
return meleeSet
end
-- Called by the default 'update' self-command.
function job_update(cmdParams, eventArgs)
select_movement_feet()
determine_haste_group()
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
--function determine_haste_group()
-- classes.CustomMeleeGroups:clear()
-- if buffactive.embrava and (buffactive.march == 2 or (buffactive.march and buffactive.haste)) then
-- classes.CustomMeleeGroups:append('MaxHaste')
-- elseif buffactive.march == 2 and buffactive.haste then
-- classes.CustomMeleeGroups:append('MaxHaste')
-- elseif buffactive.embrava and (buffactive.haste or buffactive.march) then
-- classes.CustomMeleeGroups:append('Haste_35')
-- elseif buffactive.haste then
-- classes.CustomMeleeGroups:append('HighHaste')
-- elseif buffactive.march == 2 then
-- classes.CustomMeleeGroups:append('HighHaste')
-- elseif buffactive.march == 1 and buffactive['haste samba'] then
-- classes.CustomMeleeGroups:append('HighHaste')
-- end
--end
function determine_haste_group()
classes.CustomMeleeGroups:clear()
-- assuming +4 for marches (ghorn has +5)
-- Haste (white magic) 15%
-- Haste Samba (Sub) 5%
-- Haste (Merited DNC) 10% (never account for this)
-- Victory March +0/+3/+4/+5 9.4/14%/15.6%/17.1% +0
-- Advancing March +0/+3/+4/+5 6.3/10.9%/12.5%/14% +0
-- Embrava 30% with 500 enhancing skill
-- Mighty Guard - 15%
-- buffactive[580] = geo haste
-- buffactive[33] = regular haste
-- buffactive[604] = mighty guard
-- state.HasteMode = toggle for when you know Haste II is being cast on you
-- Hi = Haste II is being cast. This is clunky to use when both haste II and haste I are being cast
if state.HasteMode.value == 'Hi' then
if ( ( (buffactive[33] or buffactive[580] or buffactive.embrava) and (buffactive.march or buffactive[604]) ) or
( buffactive[33] and (buffactive[580] or buffactive.embrava) ) or
( buffactive.march == 2 and buffactive[604] ) ) then
add_to_chat(8, '-------------Max-Haste Mode Enabled--------------')
classes.CustomMeleeGroups:append('MaxHaste')
elseif ( (buffactive[33] or buffactive.march == 2 or buffactive[580]) and buffactive['haste samba'] ) then
add_to_chat(8, '-------------Haste 35%-------------')
classes.CustomMeleeGroups:append('Haste_35')
elseif ( ( buffactive[580] or buffactive[33] or buffactive.march == 2 ) or
( buffactive.march == 1 and buffactive[604] ) ) then
add_to_chat(8, '-------------Haste 30%-------------')
classes.CustomMeleeGroups:append('Haste_30')
elseif ( buffactive.march == 1 or buffactive[604] ) then
add_to_chat(8, '-------------Haste 15%-------------')
classes.CustomMeleeGroups:append('Haste_15')
end
else
if ( buffactive[580] and ( buffactive.march or buffactive[33] or buffactive.embrava or buffactive[604]) ) or -- geo haste + anything
( buffactive.embrava and (buffactive.march or buffactive[33] or buffactive[604]) ) or -- embrava + anything
( buffactive.march == 2 and (buffactive[33] or buffactive[604]) ) or -- two marches + anything
( buffactive[33] and buffactive[604] and buffactive.march ) then -- haste + mighty guard + any marches
add_to_chat(8, '-------------Max Haste Mode Enabled--------------')
classes.CustomMeleeGroups:append('MaxHaste')
elseif ( (buffactive[604] or buffactive[33]) and buffactive['haste samba'] and buffactive.march == 1) or -- MG or haste + samba with 1 march
( buffactive.march == 2 and buffactive['haste samba'] ) or
( buffactive[580] and buffactive['haste samba'] ) then
add_to_chat(8, '-------------Haste 35%-------------')
classes.CustomMeleeGroups:append('Haste_35')
elseif ( buffactive.march == 2 ) or -- two marches from ghorn
( (buffactive[33] or buffactive[604]) and buffactive.march == 1 ) or -- MG or haste + 1 march
( buffactive[580] ) or -- geo haste
( buffactive[33] and buffactive[604] ) then -- haste with MG
add_to_chat(8, '-------------Haste 30%-------------')
classes.CustomMeleeGroups:append('Haste_30')
elseif buffactive[33] or buffactive[604] or buffactive.march == 1 then
add_to_chat(8, '-------------Haste 15%-------------')
classes.CustomMeleeGroups:append('Haste_15')
end
end
end
function select_movement_feet()
if world.time >= 17*60 or world.time < 7*60 then
gear.MovementFeet.name = gear.NightFeet
else
gear.MovementFeet.name = gear.DayFeet
end
end
function job_post_precast(spell, action, spellMap, eventArgs)
if spell.type == 'WeaponSkill' then
if world.time >= 17*60 or world.time < 7*60 then -- Dusk to Genmei time.
equip({ear1="Lugra Earring +1", ear2="Lugra Earring"})
end
end
end
function job_post_precast(spell, action, spellMap, eventArgs)
if spellMap == 'ElementalNinjutsu' then
if spell.english:contains(': San') then
equip({feet="Mochi. Kyahan +1"})
end
end
end
function job_post_midcast(spell, action, spellMap, eventArgs)
if spellMap == 'ElementalNinjutsu' then
if spell.english:contains(': San') then
equip({head="Mochi. Hatsuburi +1"})
end
if spell.element == world.day_element or spell.element == world.weather_element then
equip({waist="Hachirin-no-Obi"})
end
if state.Buff.Futae then
equip(sets.precast.JA['Futae'])
end
if state.Buff.Doom then
equip(sets.buff.Doom)
end
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'DNC' then
set_macro_page(1, 4)
elseif player.sub_job == 'WAR' then
set_macro_page(2, 4)
elseif player.sub_job == 'RUN' then
set_macro_page(3, 4)
elseif player.sub_job == 'RDM' then
set_macro_page(4, 4)
else
set_macro_page(1, 4)
end
end
Server: Odin
Game: FFXI
Posts: 177
By Odin.Speedyjim 2016-09-20 17:14:55
If I understand correctly, it's saying that there is no such index called "HasteMode", based on the "nil value" error.
I suspect it has something to do with state.HasteMode = M{['description']='Haste Mode', 'Normal', 'Hi'}
I could be wrong, as I'm no expert in LUA, but I'd start looking there and hopefully somebody (Flippant!) can resolve this.
Ragnarok.Flippant
Server: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2016-09-20 17:32:28
job_setup() is called before user_setup(), so you're trying to use the function before the mode exists. Just move the determine_haste_group() on line 23 to somewhere around line 43/44.
[+]
Server: Asura
Game: FFXI
Posts: 1326
By Asura.Azagarth 2016-09-20 17:49:21
once i can log back in i will try it ;D thanks as always
Phoenix.Capuchin
Server: Phoenix
Game: FFXI
Posts: 3592
By Phoenix.Capuchin 2016-09-20 20:50:42
Most of my questions for NIN will regard tanking on NIN as I have never played a tank job before. So I hope you guys are willing to field these questions thanks:
I agree with Langly's answers on your questions #1-5.
However, a fundamental point I'd like to make is that in 2016, NIN really isn't a good tank job outside of very particular niche situations/specific mobs. RUN PUP PLD are far more useful in the vast majority of tanking situations.
A few examples where NIN works well as a tank:
* Wrathare (135): quite good to avoid endeath on melee hits
* Glazemane (128): blinking away single target melee hits (especially under Mighty Strikes and with the NM getting a large increasing attack boost over time) is important, and Migawari helps provide some insurance against 1-shot if you get hit with shadows down after an AoE.
* Volatile Cluster (128): Migawari is nice to deal with Self-Destruct in a lowman group (need to turn and get Migawari back up if it's absorbed with timer down though)
More often than not, blink tanking in general isn't that viable on most serious content thanks to AoE shadow wipes and magic damage. Even when blink tanking does work, RUN is arguably better for that niche: much better native tanking JAs, much sturdier against magic damage that hits through shadows, much better for resisting status and Meva, better tanking gear options, etc. - plus the advantages to your party from stuff like Rayke/Gambit to support nuking offense, Vallation to help elemental defense and fast cast for your party, etc.
NIN is further hurt in a tanking role by having few good native enmity generation tools. Basically just Yonin and Issekigan. Yonin is kinda mediocre, considering that it decays over time and isn't incredibly potent to begin with - Utsu does apparently generate more enmity under the effect of Yonin, but it doesn't "feel" terribly strong (admittedly, I don't have much serious test data). Issekigan is nice for a short time, as it gives CE/VE upon a parry proc under the JA (enhanced by Issekigan Job Points), but it's not a very reliable long term since it's a 1min JA/5min recast. So, you're dealing with whatever you get from subjob. Flash from /RUN is often good enough, and it's a pretty good tanking subjob anyway thanks to the additional defensive tools, otherwise you're looking at Voke from /WAR, spamming /BLU spells, etc.
Evasion tanking is also kind of just not a thing on high end current content, as far as I can tell. I haven't personally looked at it extensively, but I've seen others who tried and were unimpressed, and it seems quite reasonable to expect that even gearing for eva, you're going to have a poor (if not floored or barely better) evasion rate. And then you still have to consider that you'd still want to rely on shadows as much as possible, and evasion is meaningless when mob TP moves or AoE spells simply wipe all of your shadows.
On the bright side, Utsu: San does have a super fast cast speed, and even when it's wiped you have Ni to fall back on. But any time you're fighting something that's just AoE wiping all of your shadows, that's decidedly less useful.
I suppose it's also fine for tanking something like CP parties while also adding some SC/MB ability. But I don't think that's really what we are talking about when we ask if NIN is a good tank on endgame content.
All that being said...
Quote: 6) For tanking mobs with magic AoE would you use an mdt katana? What about breath? What are the best setups for magical and breath damage taken?
Eh... for mobs with magic AoE, I just wouldn't be using a NIN tank to begin with. Get a RUN, PLD, PUP instead.
But if you just knew you were gonna eat AoE magical damage on NIN and you weren't concerned with taking a hit to your DPS, Raicho+1 or even +1/NQ might be somewhat plausible (for non-RMEA, for an RMEA holder I'd assume you'd want to use that anyway... plus the parry skill+269 isn't nothing). In general, for tanking I'd lean more toward Shigi's ninjutsu recast (Utsu, Migawari). [EDIT: derp, I also forgot Shigi's augmented stats have DT-5%, making it really good and a pretty clear offhand choice over an NQ Raicho]
NIN's MDT/BDT gear is mostly gonna be whatever all jobs DT- (or specifically MDT/BDT) pieces you can use, there's not much specific to NIN. Amm Greaves are one notable piece that doesn't get so much use on other jobs. DT-5% with max augments.
Otherwise, we're looking at stuff like:
* Typical all jobs DT rings (D.Ring, Dark Rings, Vocane, etc.)
* Multi-job DT neck/back (e.g. Loricate/Twilight necks, Solemnity Cape)
* Augmented DT Herculean gear works pretty well, gloves/legs also have base PDT-2% on them.
But really, if you expect to eat AoE nukes you should probably be thinking about getting a tank that isn't a NIN.
Quote: 7) Gear enmity supposedly caps at 200, can NIN reach that? Can you provide a max enmity set and are there any compromise pieces that have additional stats but also less enmity?
I seriously doubt NIN is hitting cap with any mix of gear (plus Yonin, +30 enmity at max strength). However, that's really not likely to be a gigantic concern. You're prob gonna be decent keeping hate as long as you can keep shadows up and spam flash from /RUN without thinking much about enmity other than tossing a few pieces into a flash set. It's the whole dying to AoE think that will get you.
Some good pieces though:
+10 Emet Harness +1
+9 Kurys Gloves
+10 Unmoving Collar +1 (or +8 Warder's Charm +1)
+7 Ahosi Leggings (or +6 for 119 Relic feet
+7 Earthcry Mantle (or +6 Fravashi)
+5 rings (several choices: Eihwaz, Supershear, Begrudging, etc. I'm probably missing some)
+5 Trux Earring
+4 Cryptic Earring
Of course, Nagi also has Enmity+30. But yeah, I'm assuming most people aren't making a Mythic katana for tanking purposes, and it falls behind the other RMEA now for actual DD purposes.
Quote: 8) How important is a full spell interupt set for NIN and can they reach the cap easily? If so what is the spell interupt gear?
Not very important. Utsu: San is super fast and you can often go San to San anyway. Ni is fast too. If you're actually running into situations where interrupt- gear is meaningful... again, you really shouldn't be using a NIN tank.
Quote: 9) Have you tanked anything ilvl 135+ on NIN and if so what? Can you share your experiences/gear choices? See above.
Quote: 10) How useful are the elemental resistance down aspects of ninjitsu for mana burn setups? I'm not expecting something like rayke which lowers mob family resistances but was it ever quantified how much macc it would add or how long it lasts?
I'd love to see someone answer this myself. It's definitely nothing on the level of Rayke, or even Quick Draw. But if somebody has tested, would be cool to see. Honestly, most people here have been more worried about casting same element as the mages and maximizing MB damage, this topic has been a bit NIN-nuke crazy as of late.
[+]
|
|