Final Fantasy XIV Database - Ffxivpro.com

Eorzea Time
 
 
 
Language: JP EN FR DE
users online
Search Term:
In:
Sort By:
Date:
Showing 9601-9630 of 10000
By Boposhopo on 2025-06-06 15:40:29
tarokupo said: »
Ah I see, thank you. Do you know of any lua's that don't use GearInfo that I could take a look at?

The Kinematics luas are old, but work just fine and are basically a super base line version of Arislan's lua (he references this at the top of his LUAs as well. They're great cause they're basically a skeleton you can just keep adding to. So the base is there, and whatever you want to add in and make work can be added in.

If you're looking for one that's already got a bunch of functions in it, I unfortunately do not have a DNC lua.
By Boposhopo on 2025-06-06 15:35:58
Lakshmi.Buukki said: »
it's still referenced at the bottom of Kaius's guide using an archived version.

Ooh did not know that, good to know, may use that to work on the general community guide later.
By Goltana101 on 2025-06-06 15:27:38
Bahamut.Creaucent said: »
Er im not sure about that guide honestly... assuming you mean kaius?

They are telling people to that you need to switch gear around to "cap equipment haste" when capped magical and wyvern out with /SAM you only need 17% gear haste to cap. The only one they actually got right is the Naegling haste.

I didn't see this mentioned, and all the engaged sets cap haste or specifically state why it isn't capped. Maybe I missed this reference, or he edited the sets afterwards and forgot to fix that line? Idk, the guide overall looks solid to me.

Bahamut.Boposhopo said: »
nuked the previous guide

it's still referenced at the bottom of Kaius's guide using an archived version.
By quelthos on 2025-06-06 15:27:00
i added this back but does not work, i also attached entire lua
Code
	function check_moving()
        if state.Auto_Kite.value == false and moving then
            state.Auto_Kite:set(true)
        elseif state.Auto_Kite.value == true and moving == false then
            state.Auto_Kite:set(false)
        end
	end

Code
-- Initialization function for this job file.
function get_sets()
    mote_include_version = 2

    -- Load and initialize the include file.
    include('Mote-Include.lua')
end

-- Setup vars that are user-independent.  state.Buff vars initialized here will automatically be tracked.
function job_setup()
    -- QuickDraw Selector
    state.Mainqd = M{['description']='Primary Shot', 'Fire Shot', 'Ice Shot', 'Wind Shot', 'Earth Shot', 'Thunder Shot', 'Water Shot'}
    state.Altqd = M{['description']='Secondary Shot', 'Fire Shot', 'Ice Shot', 'Wind Shot', 'Earth Shot', 'Thunder Shot', 'Water Shot'}
    state.UseAltqd = M(false, 'Use Secondary Shot')
    state.SelectqdTarget = M(false, 'Select Quick Draw Target')
    state.IgnoreTargetting = M(false, 'Ignore Targetting')

    state.QDMode = M{['description']='Quick Draw Mode', 'STP', 'Normal'}

    state.Currentqd = M{['description']='Current Quick Draw', 'Main', 'Alt'}

    -- Whether to use Luzaf's Ring
    state.LuzafRing = M(false, "Luzaf's Ring")
    -- Whether a warning has been given for low ammo
    state.warned = M(false)

    no_swap_gear = S{"Warp Ring", "Dim. Ring (Dem)", "Dim. Ring (Holla)", "Dim. Ring (Mea)",
              "Trizek Ring", "Echad Ring", "Facility Ring", "Capacity Ring",
              "Dev. Bul. Pouch", "Chr. Bul. Pouch", "Liv. Bul. Pouch"}
    elemental_ws = S{"Aeolian Edge", "Leaden Salute", "Wildfire", "Hot Shot"}
    no_shoot_ammo = S{"Animikii Bullet", "Hauksbok Bullet"}

    include('Mote-TreasureHunter')

    -- For th_action_check():
    -- JA IDs for actions that always have TH: Provoke, Animated Flourish
    info.default_ja_ids = S{35, 204}
    -- Unblinkable JA IDs for actions that always have TH: Quick/Box/Stutter Step, Desperate/Violent Flourish
    info.default_u_ja_ids = S{201, 202, 203, 205, 207}

    define_roll_values()

    lockstyleset = 1
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')
    state.HybridMode:options('Normal')
    state.RangedMode:options('Normal', 'RACC')
    state.WeaponskillMode:options('Normal', 'Acc', 'RACC')
    state.IdleMode:options('Normal')

    state.WeaponSet = M{['description']='Weapon Set', 'DP', 'SB', 'HS', 'LS', 'AE'}
    -- state.CP = M(false, "Capacity Points Mode")
    state.WeaponLock = M(false, 'Weapon Lock')	

    gear.RAbullet = "Chrono Bullet"
    gear.RAccbullet = "Chrono Bullet"
    gear.WSbullet = "Chrono Bullet"
    gear.MAbullet = "Living Bullet"
    gear.QDbullet = "Hauksbok Bullet"
    options.ammo_warning_limit = 10

    -- Additional local binds
    --include('Global-Binds.lua') -- OK to remove this line
    --include('Global-GEO-Binds.lua') -- OK to remove this line

    --send_command('bind @t gs c cycle treasuremode')
    --send_command('bind ^` input /ja "Double-up" <me>')
    --send_command('bind ^c input /ja "Crooked Cards" <me>')
    --send_command('bind ^s input /ja "Snake Eye" <me>')
    --send_command('bind ^f input /ja "Fold" <me>')
    --send_command('bind !` input /ja "Bolter\'s Roll" <me>')
    send_command ('bind @` gs c toggle LuzafRing')

    send_command('bind ^insert gs c cycleback mainqd')
    send_command('bind ^delete gs c cycle mainqd')
    send_command('bind ^home gs c cycle altqd')
    send_command('bind ^end gs c cycleback altqd')
    send_command('bind ^pageup gs c toggle selectqdtarget')
    send_command('bind ^pagedown gs c toggle usealtqd')

    -- send_command('bind @c gs c toggle CP')
    send_command('bind @q gs c cycle QDMode')
    send_command('bind ` tc nearest')
    send_command('bind @e gs c cycleback WeaponSet')
    send_command('bind @r gs c cycle WeaponSet')
    send_command('bind @w gs c toggle WeaponLock')

    --send_command('bind ^numlock input /ja "Triple Shot" <me>')

    --if player.sub_job == 'WAR' then
    --    send_command('bind ^numpad/ input /ja "Berserk" <me>')
    --    send_command('bind ^numpad* input /ja "Warcry" <me>')
    --    send_command('bind ^numpad- input /ja "Aggressor" <me>')
    --end

    --send_command('bind ^numpad7 input /ws "Savage Blade" <t>')
    --send_command('bind ^numpad8 input /ws "Last Stand" <t>')
    --send_command('bind ^numpad4 input /ws "Leaden Salute" <t>')
    --send_command('bind ^numpad5 input /ws "Requiescat" <t>')
    --send_command('bind ^numpad6 input /ws "Wildfire" <t>')
    --send_command('bind ^numpad1 input /ws "Aeolian Edge" <t>')
    --send_command('bind ^numpad2 input /ws "Evisceration" <t>')

    --send_command('bind %numpad0 input /ra <t>')


    state.Auto_Kite = M(false, 'Auto_Kite')
    --Haste = 0
    --DW_needed = 0
    --DW = false
    moving = false
    update_combat_form()
    --determine_haste_group()
end


-- Called when this job file is unloaded (eg: job change)
function user_unload()
    send_command('unbind ^`')
    send_command('unbind ^c')
    send_command('unbind ^s')
    send_command('unbind ^f')
    send_command('unbind !`')
    send_command('unbind @t')
    send_command('unbind @`')
    send_command('unbind ^insert')
    send_command('unbind ^delete')
    send_command('unbind ^home')
    send_command('unbind ^end')
    send_command('unbind ^pageup')
    send_command('unbind ^pagedown')
    send_command('unbind ^,')
    send_command('unbind @c')
    send_command('unbind `')
    send_command('unbind @w')
    send_command('unbind @e')
    send_command('unbind @r')
    send_command('unbind ^numlock')
    send_command('unbind ^numpad/')
    send_command('unbind ^numpad*')
    send_command('unbind ^numpad-')
    send_command('unbind ^numpad8')
    send_command('unbind ^numpad4')
    send_command('unbind ^numpad5')
    send_command('unbind ^numpad6')
    send_command('unbind ^numpad1')
    send_command('unbind ^numpad2')
    send_command('unbind numpad0')

    send_command('unbind #`')
    send_command('unbind #1')
    send_command('unbind #2')
    send_command('unbind #3')
    send_command('unbind #4')
    send_command('unbind #5')
    send_command('unbind #6')
    send_command('unbind #7')
    send_command('unbind #8')
    send_command('unbind #9')
    send_command('unbind #0')
end

-- Define sets and vars used by this job file.
function init_gear_sets()

    ------------------------------------------------------------------------------------------------
    ---------------------------------------- Precast Sets ------------------------------------------
    ------------------------------------------------------------------------------------------------

    sets.precast.JA['Snake Eye'] = {legs="Lanun Trews"}
    sets.precast.JA['Wild Card'] = {feet="Lanun Bottes +3"}
    sets.precast.JA['Random Deal'] = {body="Lanun Frac +3"}

    sets.precast.CorsairRoll = {
    main={ name="Rostam", augments={'Path: C',}, priority=1},
    range="Compensator",
    head="Lanun Tricorne",
    body="Nyame Mail",
    hands="Chasseur's Gants +3",
    legs="Desultor Tassets",
    feet="Nyame Sollerets",
    neck="Regal Necklace",
    waist="Flume Belt",
    left_ear="Etiolation Earring",
    right_ear="Eabani Earring",
    left_ring="Defending Ring",
    right_ring="Luzaf's Ring",
    back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
        }

    sets.precast.CorsairRoll["Caster's Roll"] = set_combine(sets.precast.CorsairRoll, {legs="Chasseur's Culottes +3"})
    sets.precast.CorsairRoll["Courser's Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Chasseur's Bottes +3"})
    sets.precast.CorsairRoll["Blitzer's Roll"] = set_combine(sets.precast.CorsairRoll, {head="Chasseur's Tricorne +3"})
    sets.precast.CorsairRoll["Tactician's Roll"] = set_combine(sets.precast.CorsairRoll, {body="Chasseur's Frac +3"})
    sets.precast.CorsairRoll["Allies' Roll"] = set_combine(sets.precast.CorsairRoll, {hands="Chasseur's Gants +3"})

    sets.precast.LuzafRing = {ring2="Luzaf's Ring"}
    sets.precast.FoldDoubleBust = {hands="Lanun Gants +3"}

    sets.precast.Waltz = {
        body="Passion Jacket",
        ring1="Asklepian Ring",
        waist="Gishdubar Sash",
        }

    sets.precast.Waltz['Healing Waltz'] = {}

    sets.precast.FC = {
    head="Carmine Mask +1",
    body="Taeon Tabard",
    hands="Leyline Gloves",
    legs={ name="Herculean Trousers", augments={'"Mag.Atk.Bns."+20','"Fast Cast"+6','STR+9','Mag. Acc.+1',}},
    feet="Carmine Greaves +1",
    neck="Baetyl Pendant",
    waist="Plat. Mog. Belt",
    left_ear="Etiolation Earring",
    right_ear="Loquac. Earring",
    right_ring="Kishar Ring",
    left_ring="Weather. Ring",
    back={ name="Camulus's Mantle", augments={'"Fast Cast"+10',}},
        }

    sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {
        body="Passion Jacket",
		neck="Magoraga Beads",
        })

    -- (10% Snapshot from JP Gifts)
    sets.precast.RA = {
        ammo=gear.RAbullet,
        head="Chasseur's Tricorne +3", --0/14
        body="Laksa. Frac +3", --0/20
        --body="Oshosi Vest +1", --14/0
        hands="Lanun Gants +3",
		legs="Adhemar Kecks +1",
        feet="Meg. Jam. +2", --10/0
        neck="Comm. Charm +2", --4/0
		ring1="Crepuscular Ring",
		back={ name="Camulus's Mantle", augments={'"Snapshot"+10',}},
        waist="Yemaya Belt", --0/5
        } --61/32

    sets.precast.RA.Flurry1 = set_combine(sets.precast.RA, {
        }) --47/52

    sets.precast.RA.Flurry2 = set_combine(sets.precast.RA.Flurry1, {
        }) --32/73

    ------------------------------------------------------------------------------------------------
    ------------------------------------- Weapon Skill Sets ----------------------------------------
    ------------------------------------------------------------------------------------------------

    sets.precast.WS = {
	head="Nyame Helm",
    body="Nyame Mail",
    hands="Nyame Gauntlets",
	legs="Nyame Flanchard",		
    feet="Nyame Sollerets",
	neck="Comm. Charm +2",
    waist="Sailfi Belt +1",
    left_ear="Ishvara Earring",
    right_ear="Moonshade Earring",
    left_ring="Cornelia's Ring",
    right_ring="Epaminondas's Ring",
    back={ name="Camulus's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
        }
	sets.precast.WS.Acc = set_combine(sets.precast.WS, {
		neck="Fotia Gorget",
		waist="Fotia Belt",
	})
	sets.precast.WS.RACC = set_combine(sets.precast.WS, {
		neck="Fotia Gorget",
		waist="Fotia Belt",
		})
    sets.precast.WS['Last Stand'] = set_combine(sets.precast.WS, {
		ammo=gear.WSbullet,
		hands="Chasseur's Gants +3",
		neck="Fotia Gorget",
		waist="Fotia Belt",
		back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','AGI+10','Weapon skill damage +10%',}},
		})
    sets.precast.WS['Last Stand'].RACC = set_combine(sets.precast.WS['Last Stand'], {
		})
		
    sets.precast.WS['Detonator'] = set_combine(sets.precast.WS['Last Stand'], {})
	
    sets.precast.WS['Wildfire'] = {
    ammo=gear.MAbullet,
    head="Nyame Helm",
    body="Lanun Frac +3",
    hands="Nyame Gauntlets",
	legs="Nyame Flanchard",
    feet="Lanun Bottes +3", 
	waist="Orpheus's Sash",
	neck="Comm. Charm +2",
    left_ear="Friomisi Earring",
    right_ear="Crematio Earring",
    left_ring="Cornelia's Ring",
    right_ring="Dingir Ring",
    back={ name="Camulus's Mantle", augments={'AGI+20','Mag. Acc+20 /Mag. Dmg.+20','AGI+10','Weapon skill damage +10%',}},
        }
    sets.precast.WS['Aeolian Edge'] = set_combine(sets.precast.WS['Wildfire'], {
	right_ear="Moonshade Earring",
        })
    sets.precast.WS['Hot Shot'] = set_combine(sets.precast.WS['Wildfire'], {
	--ammo=gear.WSbullet,
	body="Nyame Mail",
	--neck="Fotia Gorget",
	--waist="Fotia Belt",
	right_ear="Moonshade Earring",
	})
    sets.precast.WS['Leaden Salute'] = set_combine(sets.precast.WS['Wildfire'], {
	head="Pixie Hairpin +1",
    right_ear="Moonshade Earring",
    right_ring="Archon Ring",
    })

    sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS, {
    neck="Fotia Gorget",
    waist="Fotia Belt",
        })
    sets.precast.WS['Savage Blade'] = set_combine(sets.precast.WS, {
		neck="Rep. Plat. Medal",	
		hands="Chasseur's Gants +3",
        })
    sets.precast.WS['Savage Blade'].Acc = set_combine(sets.precast.WS['Savage Blade'], {
    neck="Fotia Gorget",
    waist="Fotia Belt",
        })
    sets.precast.WS['Swift Blade'] = set_combine(sets.precast.WS, {
        })
    sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS, {
        }) --MND
    sets.precast.WS['Requiescat'].Acc = set_combine(sets.precast.WS.Acc, {
        }) --MND
    sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {
        }) 
    sets.precast.WS['Exenterator'].Acc = set_combine(sets.precast.WS.Acc, {
        })

    sets.precast.CorsairShot = { 
	ammo=gear.QDbullet,
    head="Nyame Helm",
    body="Lanun Frac +3",
    hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
	legs="Nyame Flanchard",
    feet="Chasseur's Bottes +3",
	waist="Orpheus's Sash",
	neck="Comm. Charm +2",
    left_ear="Friomisi Earring",
    right_ear="Crematio Earring",
    left_ring="Weather. Ring",
    right_ring="Dingir Ring",
    back="Izdubar Mantle",
	}
    sets.precast.CorsairShot.STP = { 
	ammo=gear.QDbullet,
    head="Nyame Helm",
    body="Lanun Frac +3",
    hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
	legs="Nyame Flanchard",
    feet="Chasseur's Bottes +3",
	waist="Orpheus's Sash",
	neck="Comm. Charm +2",
    left_ear="Friomisi Earring",
    right_ear="Crematio Earring",
    left_ring="Weather. Ring",
    right_ring="Dingir Ring",
    back="Izdubar Mantle",
	}
	
    sets.precast.CorsairShot['Light Shot'] = set_combine(sets.precast.CorsairShot, {
	ammo=gear.QDbullet,
    left_ring="Weather. Ring",
        })

    sets.precast.CorsairShot['Dark Shot'] = set_combine(sets.precast.CorsairShot, {
	ammo=gear.QDbullet,
	head="Pixie Hairpin +1",
    left_ring="Archon Ring",
	})

    ------------------------------------------------------------------------------------------------
    ---------------------------------------- Midcast Sets ------------------------------------------
    ------------------------------------------------------------------------------------------------

    sets.midcast.FastRecast = sets.precast.FC

    sets.midcast.SpellInterrupt = {
        body=gear.Taeon_Phalanx_body, --10
        hands="Rawhide Gloves", --15
        legs="Carmine Cuisses +1", --20
        feet=gear.Taeon_Phalanx_feet, --10
        neck="Loricate Torque +1", --5
        ear1="Halasz Earring", --5
        ear2="Magnetic Earring", --8
        ring2="Evanescence Ring", --5
        waist="Rumination Sash", --10
        }

    sets.midcast.Utsusemi = sets.midcast.SpellInterrupt

    sets.midcast.Cure = {
        neck="Incanter's Torque",
        ear1="Roundel Earring",
        ear2="Mendi. Earring",
        ring1="Lebeche Ring",
        ring2="Haoma's Ring",
        waist="Bishop's Sash",
        }

    sets.midcast.Utsusemi = sets.midcast.SpellInterrupt

    -- Ranged gear
    sets.midcast.RA = {
        ammo=gear.RAbullet,
    head="Malignance Chapeau",
    body="Malignance Tabard",
    hands="Malignance Gloves",
    legs="Chas. Culottes +3",
    feet="Malignance Boots",
    neck="Iskur Gorget",
    waist="Yemaya Belt",
    left_ear="Telos Earring",
    right_ear="Crep. Earring",
    left_ring="Crepuscular Ring",
    right_ring="Ilabrat Ring",
    back={ name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Rng.Acc.+10','"Store TP"+10',}},
        }

	sets.midcast.RA.RACC = set_combine(sets.midcast.RA, {
    --waist="K. Kachina Belt +1",
	--neck="Null Loop",
	waist="Null Belt",
	back="Null Shawl",
	})


    sets.midcast.RA.Acc = set_combine(sets.midcast.RA, {
        })

    sets.midcast.RA.HighAcc = set_combine(sets.midcast.RA.Acc, {

        })

    sets.midcast.RA.Critical = set_combine(sets.midcast.RA, {
        })

    sets.midcast.RA.STP = set_combine(sets.midcast.RA, {
        })

    sets.TripleShot = set_combine(sets.midcast.RA, {
        --head="Oshosi Mask +1", --5
        body="Chasseur's Frac +3", --13
        hands="Lanun Gants +3",
        --legs="Osh. Trousers +1", --6
        --feet="Osh. Leggings +1", --3
        }) --27
		

    sets.TripleShotCritical = set_combine(sets.midcast.RA, {
        })

    sets.TrueShot = set_combine(sets.midcast.RA, {
        })

    ------------------------------------------------------------------------------------------------
    ----------------------------------------- Idle Sets --------------------------------------------
    ------------------------------------------------------------------------------------------------

    sets.resting = {}

    sets.idle = {
    ammo=gear.RAbullet,
        head="Malignance Chapeau", --6/6
        body="Malignance Tabard", --9/9
        hands="Malignance Gloves", --5/5
		legs="Chasseur's Culottes +3",
        feet="Malignance Boots", --4/4
    neck="Elite Royal Collar",
    waist="Flume Belt",
    left_ear="Etiolation Earring",
    right_ear="Eabani Earring",
    left_ring={name="Chirich Ring +1", bag="wardrobe2"},
    right_ring={name="Chirich Ring +1", bag="wardrobe3"},
    back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
        }

    sets.idle.DT = set_combine(sets.idle, {
        })

    sets.idle.Refresh = set_combine(sets.idle, {
        })

    sets.idle.Town = set_combine(sets.idle, {
        })


    ------------------------------------------------------------------------------------------------
    ---------------------------------------- Defense Sets ------------------------------------------
    ------------------------------------------------------------------------------------------------

    sets.defense.PDT = sets.idle.DT

    sets.defense.MDT = {
        }

    sets.Kiting = {legs="Carmine Cuisses +1"}


    ------------------------------------------------------------------------------------------------
    ---------------------------------------- Engaged Sets ------------------------------------------
    ------------------------------------------------------------------------------------------------

    -- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
    -- sets if more refined versions aren't defined.
    -- If you create a set with both offense and defense modes, the offense mode should be first.
    -- EG: sets.engaged.Dagger.Accuracy.Evasion

    sets.engaged = {
	ammo=gear.RAbullet,
    head="Malignance Chapeau",
    body="Malignance Tabard",
    hands="Malignance Gloves",
    legs="Malignance Tights",
    feet="Malignance Boots",
    neck="Iskur Gorget",
    waist="Sailfi Belt +1",
    left_ear="Telos Earring",
    right_ear="Crep. Earring",
    left_ring={name="Chirich Ring +1", bag="wardrobe2"},
    right_ring={name="Chirich Ring +1", bag="wardrobe3"},
    back={ name="Camulus's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
        }
		
	sets.engaged.Acc = set_combine(sets.engaged, {	
	neck="Null Loop",
	waist="Null Belt",
	back="Null Shawl",
	})
    -- * DNC Subjob DW Trait: +15%
    -- * NIN Subjob DW Trait: +25%

    -- No Magic Haste (74% DW to cap)
    sets.engaged.DW = set_combine(sets.engaged, {
    waist="Reiki Yotai",
    right_ear="Eabani Earring",
      })
	  
	sets.engaged.DW.Acc = set_combine(sets.engaged.DW, {	
	neck="Null Loop",
	--waist="Null Belt",
	back="Null Shawl",
	})
	   
    sets.empylegs =  {
    legs="Chasseur's Culottes +3",
      } 
    ------------------------------------------------------------------------------------------------
    ---------------------------------------- Special Sets ------------------------------------------
    ------------------------------------------------------------------------------------------------

    sets.buff.Doom = {
        neck="Nicander's Necklace", --20
        ring1={name="Eshmun's Ring", bag="wardrobe3"}, --20
        ring2={name="Eshmun's Ring", bag="wardrobe4"}, --20
        waist="Gishdubar Sash", --10
        }

    sets.Obi = {waist="Hachirin-no-Obi"}

    sets.TreasureHunter = {head="Volte Cap", hands=gear.Herc_TH_hands, feet="Volte Boots", waist="Chaac Belt"}
	
	sets.fulltp = { right_ear="Crematio Earring" }
	
	sets.RP = {    
	main={ name="Rostam", augments={'Path: A',}},
    sub={ name="Rostam", augments={'Path: C',}},
	ranged="Death Penalty"
	}
    sets.DP = {main={ name="Rostam", augments={'Path: A',}}, sub="Tauret", ranged="Death Penalty"}
    sets.SB = {main="Naegling", sub="Gleti's Knife", ranged="Anarchy +2"}
    sets.HS = {main="Naegling", sub="Tauret", ranged="Fomalhaut"}
    sets.LS = {main={ name="Rostam", augments={'Path: A',}}, sub="Kustawi +1", ranged="Fomalhaut"}
	sets.AE = {main="Tauret", sub="Gleti's Knife", ranged="Anarchy +2"}
	
    sets.DefaultShield = {sub="Nusku Shield"}

end


-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------

-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
-- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
function job_precast(spell, action, spellMap, eventArgs)
    if spell.action_type == 'Ranged Attack' or spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
        do_bullet_checks(spell, spellMap, eventArgs)
    end

    if spell.english == 'Fold' and buffactive['Bust'] == 2 then
        if sets.precast.FoldDoubleBust then
            equip(sets.precast.FoldDoubleBust)
            eventArgs.handled = true
        end
    end
    if spellMap == 'Utsusemi' then
        if buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then
            cancel_spell()
            add_to_chat(123, '**!! '..spell.english..' Canceled: [3+ IMAGES] !!**')
            eventArgs.handled = true
            return
        elseif buffactive['Copy Image'] or buffactive['Copy Image (2)'] then
            send_command('cancel 66; cancel 444; cancel Copy Image; cancel Copy Image (2)')
        end
    end
end

function job_post_precast(spell, action, spellMap, eventArgs)
	if elemental_ws:contains(spell.name) and player.tp == 3000 then
        equip(sets.fulltp)
    end
    if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") then
        if state.LuzafRing.value then
            equip(sets.precast.LuzafRing)
        end
    end
    if spell.action_type == 'Ranged Attack' then
        special_ammo_check()
        if flurry == 2 then
            equip(sets.precast.RA.Flurry2)
        elseif flurry == 1 then
            equip(sets.precast.RA.Flurry1)
        end
    elseif spell.type == 'WeaponSkill' then
        if spell.skill == 'Marksmanship' then
            special_ammo_check()
        end
        if elemental_ws:contains(spell.name) then
            -- Matching double weather (w/o day conflict).
            if spell.element == world.weather_element and (get_weather_intensity() == 2 and spell.element ~= elements.weak_to[world.day_element]) then
                equip({waist="Hachirin-no-Obi"})
            -- Target distance under 1.7 yalms.
            elseif spell.target.distance < (1.7 + spell.target.model_size) then
                equip({waist="Orpheus's Sash"})
            -- Matching day and weather.
            elseif spell.element == world.day_element and spell.element == world.weather_element then
                equip({waist="Hachirin-no-Obi"})
            -- Target distance under 8 yalms.
            elseif spell.target.distance < (8 + spell.target.model_size) then
                equip({waist="Orpheus's Sash"})
            -- Match day or weather.
            elseif spell.element == world.day_element or spell.element == world.weather_element then
                equip({waist="Hachirin-no-Obi"})
            end
        end
    end
end

function job_post_midcast(spell, action, spellMap, eventArgs)
	if spell.type == 'CorsairShot' then
        if (spell.english ~= 'Light Shot' and spell.english ~= 'Dark Shot') then
            -- Matching double weather (w/o day conflict).
            if spell.element == world.weather_element and (get_weather_intensity() == 2 and spell.element ~= elements.weak_to[world.day_element]) then
                equip({waist="Hachirin-no-Obi"})
            -- Target distance under 1.7 yalms.
            elseif spell.target.distance < (1.7 + spell.target.model_size) then
                equip({waist="Orpheus's Sash"})
            -- Matching day and weather.
            elseif spell.element == world.day_element and spell.element == world.weather_element then
                equip({waist="Hachirin-no-Obi"})
            -- Target distance under 8 yalms.
            elseif spell.target.distance < (8 + spell.target.model_size) then
                equip({waist="Orpheus's Sash"})
            -- Match day or weather.
            elseif spell.element == world.day_element or spell.element == world.weather_element then
                equip({waist="Hachirin-no-Obi"})
            end
        end
	elseif spell.action_type == 'Ranged Attack' then
        if buffactive['Triple Shot'] and state.RangedMode.value ~= "RACC" then
            equip(sets.TripleShot)
            if buffactive['Aftermath: Lv.3'] and player.equipment.ranged == "Armageddon" then
                equip(sets.TripleShotCritical)
                if (spell.target.distance < (7 + spell.target.model_size)) and (spell.target.distance > (5 + spell.target.model_size)) then
                    equip(sets.TrueShot)
                end
            end
        elseif buffactive['Aftermath: Lv.3'] and player.equipment.ranged == "Armageddon" then
            equip(sets.midcast.RA.Critical)
            if (spell.target.distance < (7 + spell.target.model_size)) and (spell.target.distance > (5 + spell.target.model_size)) then
                equip(sets.TrueShot)
            end
        end
    end
end

-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_aftercast(spell, action, spellMap, eventArgs)
    if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") and not spell.interrupted then
        display_roll_info(spell)
    end
    --if spell.english == "Light Shot" then
        --send_command('@timers c "Light Shot ['..spell.target.name..']" 60 down abilities/00195.png')
    --end
    if player.status ~= 'Engaged' and state.WeaponLock.value == false then
        check_weaponset()
    end
    if player.status == 'Engaged' and state.WeaponLock.value == false then
        check_weaponset()
    end
end

function job_buff_change(buff,gain)
-- If we gain or lose any flurry buffs, adjust gear.
    if S{'flurry'}:contains(buff:lower()) then
        if not gain then
            flurry = nil
            --add_to_chat(122, "Flurry status cleared.")
        end
        if not midaction() then
            handle_equipping_gear(player.status)
        end
    end

    if buff == "doom" then
                if gain then           
                        equip(sets.buff.Doom)
                        send_command('@input /p Doomed, please Cursna.')
                        send_command('@input /item "Holy Water" <me>')					
                        disable('ring1','ring2','waist')
                elseif not gain and not player.status == "Dead" and not player.status == "Engaged Dead" then
                        enable('ring1','ring2','waist')
                        send_command('input /p Doom removed, Thank you.')
                        handle_equipping_gear(player.status)
                else
                        enable('ring1','ring2','waist')
                        send_command('input /p '..player.name..' is no longer Doom Thank you !')
                end
    end

end

-- Handle notifications of general user state change.
function job_state_change(stateField, newValue, oldValue)
    if state.WeaponLock.value == true then
        disable('ranged')
    else
        enable('ranged')
    end

    check_weaponset()
end

-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------

-- Called by the 'update' self-command, for common needs.
-- Set eventArgs.handled to true if we don't want automatic equipping of gear.
function job_handle_equipping_gear(playerStatus, eventArgs)
    check_gear()
    update_combat_form()
end

function job_update(cmdParams, eventArgs)
    handle_equipping_gear(player.status)
end

function update_combat_form()
    if player.sub_job == 'NIN' then
		state.CombatForm:set('DW')
	else
        state.CombatForm:reset()
	end
end

-- Modify the default melee set after it was constructed.
function customize_melee_set(meleeSet)
	if player.sub_job == 'NIN' and (state.WeaponSet.value == "SB" or state.WeaponSet.value == "AE") then
		meleeSet = set_combine(meleeSet, sets.empylegs)
	end
    return meleeSet
end

function get_custom_wsmode(spell, action, spellMap)
    local wsmode
    if spell.skill == 'Marksmanship' then
        if state.RangedMode.value == 'RACC' then
            wsmode = 'RACC'
        end
    else
        if state.OffenseMode.value == 'Acc' then
            wsmode = 'Acc'
        end
    end

    return wsmode
end

-- Handle auto-targetting based on local setup.
function job_auto_change_target(spell, action, spellMap, eventArgs)
    if spell.type == 'CorsairShot' then
        if state.IgnoreTargetting.value == true then
            state.IgnoreTargetting:reset()
            eventArgs.handled = true
        end

        eventArgs.SelectNPCTargets = state.SelectqdTarget.value
    end
end

-- Set eventArgs.handled to true if we don't want the automatic display to be run.
function display_current_job_state(eventArgs)
    local cf_msg = ''
    if state.CombatForm.has_value then
        cf_msg = ' (' ..state.CombatForm.value.. ')'
    end

    local m_msg = state.OffenseMode.value
    if state.HybridMode.value ~= 'Normal' then
        m_msg = m_msg .. '/' ..state.HybridMode.value
    end

    local ws_msg = state.WeaponskillMode.value

    local qd_msg = '(' ..string.sub(state.QDMode.value,1,1).. ')'

    local e_msg = state.Mainqd.current
    if state.UseAltqd.value == true then
        e_msg = e_msg .. '/'..state.Altqd.current
    end

    local d_msg = 'None'
    if state.DefenseMode.value ~= 'None' then
        d_msg = state.DefenseMode.value .. state[state.DefenseMode.value .. 'DefenseMode'].value
    end

    local i_msg = state.IdleMode.value

    local msg = ''
    if state.Kiting.value then
        msg = msg .. ' Kiting: On |'
    end

    add_to_chat(002, '| ' ..string.char(31,210).. 'Melee' ..cf_msg.. ': ' ..string.char(31,001)..m_msg.. string.char(31,002)..  ' |'
        ..string.char(31,207).. ' WS: ' ..string.char(31,001)..ws_msg.. string.char(31,002)..  ' |'
        ..string.char(31,060).. ' QD' ..qd_msg.. ': '  ..string.char(31,001)..e_msg.. string.char(31,002)..  ' |'
        ..string.char(31,004).. ' Defense: ' ..string.char(31,001)..d_msg.. string.char(31,002)..  ' |'
        ..string.char(31,008).. ' Idle: ' ..string.char(31,001)..i_msg.. string.char(31,002)..  ' |'
        ..string.char(31,002)..msg)

    eventArgs.handled = true
end

-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------

--Read incoming packet to differentiate between Haste/Flurry I and II
windower.register_event('action',
    function(act)
        --check if you are a target of spell
        local actionTargets = act.targets
        playerId = windower.ffxi.get_player().id
        isTarget = false
        for _, target in ipairs(actionTargets) do
            if playerId == target.id then
                isTarget = true
            end
        end
        if isTarget == true then
            if act.category == 4 then
                local param = act.param
                if param == 845 and flurry ~= 2 then
                    --add_to_chat(122, 'Flurry Status: Flurry I')
                    flurry = 1
                elseif param == 846 then
                    --add_to_chat(122, 'Flurry Status: Flurry II')
                    flurry = 2
              end
            end
        end
    end)


function job_self_command(cmdParams, eventArgs)
    if cmdParams[1] == 'qd' then
        if cmdParams[2] == 't' then
            state.IgnoreTargetting:set()
        end

        local doqd = ''
        if state.UseAltqd.value == true then
            doqd = state[state.Currentqd.current..'qd'].current
            state.Currentqd:cycle()
        else
            doqd = state.Mainqd.current
        end

        send_command('@input /ja "'..doqd..'" <t>')
    end
end

function define_roll_values()
    rolls = {
        ["Corsair's Roll"] =    {lucky=5, unlucky=9, bonus="Experience Points"},
        ["Ninja Roll"] =        {lucky=4, unlucky=8, bonus="Evasion"},
        ["Hunter's Roll"] =     {lucky=4, unlucky=8, bonus="Accuracy"},
        ["Chaos Roll"] =        {lucky=4, unlucky=8, bonus="Attack"},
        ["Magus's Roll"] =      {lucky=2, unlucky=6, bonus="Magic Defense"},
        ["Healer's Roll"] =     {lucky=3, unlucky=7, bonus="Cure Potency Received"},
        ["Drachen Roll"] =      {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
        ["Choral Roll"] =       {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
        ["Monk's Roll"] =       {lucky=3, unlucky=7, bonus="Subtle Blow"},
        ["Beast Roll"] =        {lucky=4, unlucky=8, bonus="Pet Attack"},
        ["Samurai Roll"] =      {lucky=2, unlucky=6, bonus="Store TP"},
        ["Evoker's Roll"] =     {lucky=5, unlucky=9, bonus="Refresh"},
        ["Rogue's Roll"] =      {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
        ["Warlock's Roll"] =    {lucky=4, unlucky=8, bonus="Magic Accuracy"},
        ["Fighter's Roll"] =    {lucky=5, unlucky=9, bonus="Double Attack Rate"},
        ["Puppet Roll"] =       {lucky=3, unlucky=7, bonus="Pet Magic Attack/Accuracy"},
        ["Gallant's Roll"] =    {lucky=3, unlucky=7, bonus="Defense"},
        ["Wizard's Roll"] =     {lucky=5, unlucky=9, bonus="Magic Attack"},
        ["Dancer's Roll"] =     {lucky=3, unlucky=7, bonus="Regen"},
        ["Scholar's Roll"] =    {lucky=2, unlucky=6, bonus="Conserve MP"},
        ["Naturalist's Roll"] = {lucky=3, unlucky=7, bonus="Enh. Magic Duration"},
        ["Runeist's Roll"] =    {lucky=4, unlucky=8, bonus="Magic Evasion"},
        ["Bolter's Roll"] =     {lucky=3, unlucky=9, bonus="Movement Speed"},
        ["Caster's Roll"] =     {lucky=2, unlucky=7, bonus="Fast Cast"},
        ["Courser's Roll"] =    {lucky=3, unlucky=9, bonus="Snapshot"},
        ["Blitzer's Roll"] =    {lucky=4, unlucky=9, bonus="Attack Delay"},
        ["Tactician's Roll"] =  {lucky=5, unlucky=8, bonus="Regain"},
        ["Allies' Roll"] =      {lucky=3, unlucky=10, bonus="Skillchain Damage"},
        ["Miser's Roll"] =      {lucky=5, unlucky=7, bonus="Save TP"},
        ["Companion's Roll"] =  {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
        ["Avenger's Roll"] =    {lucky=4, unlucky=8, bonus="Counter Rate"},
    }
end

function display_roll_info(spell)
    rollinfo = rolls[spell.english]
    local rollsize = (state.LuzafRing.value and string.char(129,157)) or ''

    if rollinfo then
        add_to_chat(001, string.char(129,115).. '  ' ..string.char(31,210)..spell.english..string.char(31,001)..
            ' : '..rollinfo.bonus.. ' ' ..string.char(129,116).. ' ' ..string.char(129,195)..
            '  Lucky: ' ..string.char(31,204).. tostring(rollinfo.lucky)..string.char(31,001).. ' /' ..
            ' Unlucky: ' ..string.char(31,167).. tostring(rollinfo.unlucky)..string.char(31,002)..
            '  ' ..rollsize)
    end
end


-- Determine whether we have sufficient ammo for the action being attempted.
function do_bullet_checks(spell, spellMap, eventArgs)
    local bullet_name
    local bullet_min_count = 1

    if spell.type == 'WeaponSkill' then
        if spell.skill == "Marksmanship" then
            if spell.english == 'Wildfire' or spell.english == 'Leaden Salute' then
                -- magical weaponskills
                bullet_name = gear.MAbullet
            else
                -- physical weaponskills
                bullet_name = gear.WSbullet
            end
        else
            -- Ignore non-ranged weaponskills
            return
        end
    elseif spell.type == 'CorsairShot' then
        bullet_name = gear.QDbullet
    elseif spell.action_type == 'Ranged Attack' then
        bullet_name = gear.RAbullet
        if buffactive['Triple Shot'] then
            bullet_min_count = 3
        end
    end

    local available_bullets = player.inventory[bullet_name] or player.wardrobe[bullet_name]

    -- If no ammo is available, give appropriate warning and end.
    if not available_bullets then
        if spell.type == 'CorsairShot' and player.equipment.ammo ~= 'empty' then
            add_to_chat(104, 'No Quick Draw ammo left.  Using what\'s currently equipped ('..player.equipment.ammo..').')
            return
        elseif spell.type == 'WeaponSkill' and player.equipment.ammo == gear.RAbullet then
            add_to_chat(104, 'No weaponskill ammo left.  Using what\'s currently equipped (standard ranged bullets: '..player.equipment.ammo..').')
            return
        else
            add_to_chat(104, 'No ammo ('..tostring(bullet_name)..') available for that action.')
            eventArgs.cancel = true
            return
        end
    end

    -- Don't allow shooting or weaponskilling with ammo reserved for quick draw.
    if spell.type ~= 'CorsairShot' and bullet_name == gear.QDbullet and available_bullets.count <= bullet_min_count then
        add_to_chat(104, 'No ammo will be left for Quick Draw.  Cancelling.')
        eventArgs.cancel = true
        return
    end

    -- Low ammo warning.
    if spell.type ~= 'CorsairShot' and state.warned.value == false
        and available_bullets.count > 1 and available_bullets.count <= options.ammo_warning_limit then
        local msg = '*****  LOW AMMO WARNING: '..bullet_name..' *****'
        --local border = string.repeat("*", #msg)
        local border = ""
        for i = 1, #msg do
            border = border .. "*"
        end

        add_to_chat(104, border)
        add_to_chat(104, msg)
        add_to_chat(104, border)

        state.warned:set()
    elseif available_bullets.count > options.ammo_warning_limit and state.warned then
        state.warned:reset()
    end
end

function special_ammo_check()
    -- Stop if Animikii/Hauksbok equipped
    if no_shoot_ammo:contains(player.equipment.ammo) then
        cancel_spell()
        add_to_chat(123, '** Action Canceled: [ '.. player.equipment.ammo .. ' equipped!! ] **')
        return
    end
end

-- Check for various actions that we've specified in user code as being used with TH gear.
-- This will only ever be called if TreasureMode is not 'None'.
-- Category and Param are as specified in the action event packet.
function th_action_check(category, param)
    if category == 2 or -- any ranged attack
        --category == 4 or -- any magic action
        (category == 3 and param == 30) or -- Aeolian Edge
        (category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
        (category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
        then return true
    end
end

function check_gear()
    if no_swap_gear:contains(player.equipment.left_ring) then
        disable("ring1")
    else
        enable("ring1")
    end
    if no_swap_gear:contains(player.equipment.right_ring) then
        disable("ring2")
    else
        enable("ring2")
    end
    if no_swap_gear:contains(player.equipment.waist) then
        disable("waist")
    else
        enable("waist")
    end
end

function check_weaponset()
    equip(sets[state.WeaponSet.current])
    if player.sub_job ~= 'NIN' and player.sub_job ~= 'DNC' then
       equip(sets.DefaultShield)
    end
end

windower.register_event('zone change',
    function()
        if no_swap_gear:contains(player.equipment.left_ring) then
            enable("ring1")
            equip(sets.idle)
        end
        if no_swap_gear:contains(player.equipment.right_ring) then
            enable("ring2")
            equip(sets.idle)
        end
        if no_swap_gear:contains(player.equipment.waist) then
            enable("waist")
            equip(sets.idle)
        end
    end
)

--function customize_idle_set(idleSet)
    --if state.Auto_Kite.value == true then
       --idleSet = set_combine(idleSet, sets.Kiting)
    --end

    --return idleSet
--end


send_command('input /macro set 1;input /macro book 2')
    send_command('@wait 5; input /lockstyleset 60')
	
	function check_moving()
        if state.Auto_Kite.value == false and moving then
            state.Auto_Kite:set(true)
        elseif state.Auto_Kite.value == true and moving == false then
            state.Auto_Kite:set(false)
        end
	end
By HyaAsura on 2025-06-06 15:26:40
fractalvoid said: »
Asura.Aragan said: »
Bro, I know everything about the game and more

why does dhartok not have a butthole?
He wouldn't know, he's too busy wiping to Dhartok still.
By Jakey on 2025-06-06 15:16:51
I mean clearly the build is Onion Sword III and Diamond aspis!

Probably sub Warrior for fencer and some sword skill and weaponskills lol

Could skillchain endlessly with Seraph Blade and red lotus blade back and forth and they both benefit from the mab on the shield!
By Lingerie on 2025-06-06 15:05:50
Shiva.Thorny said: »
GPU is within the ballpark of SE's listed minimum requirements. But, since it's an android device, you have interpretation overhead to even run the game in the first place. Since it also has an ARM cpu, you need hardware emulation to support x86 instruction sets (which FFXI uses). It may be technically possible to launch it, but it's not straightforward and unlikely to be stable. Even if it is, performance will probably be poor.
Bahamut.Boposhopo said: »
Lingerie said: »
I know its been asked hundreds of times but, could I get ffxi on this?

Getting FFXI to run on the phone directly would be a nightmare to achieve. You could use a service like Geforce Now or Shadow PC. Geforce now has a soft cap of 100hrs a month, with any additional costing extra. Shadow PC is more expensive, but no limit and is basically just access to a virtual install of windows you can log into at any time.

Thank you both. I'll look for a laptop that can fold into a tablet. I'm not tech savvy.
By tarokupo on 2025-06-06 15:05:44
Ah I see, thank you. Do you know of any lua's that don't use GearInfo that I could take a look at?
By Dekar1 on 2025-06-06 14:57:42
One that I like to do with Maxentius is:

Black Halo > True Strike > (Detonation) > Black Halo (Gravitation) > Black Halo (Fragmentation) > Realmrazer/Hexa Strike (Light)
By Garuda.Chanti on 2025-06-06 14:52:14
Brazil has cocaine sharks!

Unfortunately not a joke.
By tarokupo on 2025-06-06 14:52:04
I hope someone can help me! My DW sets aren't working which are my standard sets since I play DNC. I've tested it in debug mode and when battle starts it equips 'sets.engaged.DW.MaxHaste' as the default but no gear is swapped.

Here is the whole file: https://pastebin.com/d8cxb7H8
By Nariont on 2025-06-06 14:48:10
Always assumed it was just cause mnk lacks the spike war/sam can offer either through warcry/MS, or hybrid exploiting/yaeg for a final push.

Also mnk being just slightly squishier in WS sets since its not simply braindead stack WSD nyame/emp+3 in every slot, and since its not all frontloaded into the 1st hit this leads to variance in WS numbers just due to missing a hit/not getting a good MA roll, etc.

Job aint bad, the other 2 meta-picks are just more consistent and can spike quicker through JAs in a time-strict event
By NynJa on 2025-06-06 14:45:13
Asura.Aragan said: »
Bro, I know everything about the game and more
By Boposhopo on 2025-06-06 14:44:57
Code
function check_moving()
    if state.DefenseMode.value == 'None'  and state.Kiting.value == false then
        if state.Auto_Kite.value == false and moving then
            state.Auto_Kite:set(true)
        elseif state.Auto_Kite.value == true and moving == false then
            state.Auto_Kite:set(false)
        end
    end
end


This function that was removed, it checks for movement.
By Shichishito on 2025-06-06 14:15:46
I think you could do:
Flash Nova -> Flash Nova = Induration -> Flash Nova = Fragmentation -> Realmrazer/Hexa Strike = Light -> Realmrazer(Aeonic Club)/Randgrith(Relic Club) = Double Light or Radiance?
By SimonSes on 2025-06-06 14:14:59
I think it's a little more complex. Imo the sefest DD is probably BLU, because you can reset TP, stunlock, boost def/mdb, has tons of blinks, cap magic haste on its own etc.
MNK is the easiest to be safe for sure.
MNK is also stronger in zerg than many people think, but it requires a WAR giving MNK warcry. Together with high SP buffs/drbuffs it makes Tornado do 99k very frequently, while footwork and impetus pushes white damage very high too. Between solid multi attack and 100% kick rate, WS frequency is also very good. MNK advantage here is also WS selection. Beside Tornado, you can also use Dragon Kick, howling fist, Maru Kala, Raging fists etc. And avoid or create skillchain and still do cap or close to cap damage.
By kestiel on 2025-06-06 14:03:43
Anybody know how to fix the xivparty box moving based on number of party members? I've tried both alignbottom false/true and it doesn't seem to care. While it's not a massive issue, it feels weird that the background moves around and there's no setting to pin it in place permanently.
By quelthos on 2025-06-06 13:41:21
Thanks, if I want the auto equip carmine legs when moving and not engaged, then unequip when not moving and engaged, what lines do i need to add?
By Genoxd on 2025-06-06 13:17:22
They should start doing more "Includes Pet" instead of duplicating it
By Nariont on 2025-06-06 13:13:25
Tarage said: »
What if the +4 just goes the Besieged route and adds limbus specific buffs?

Assuming there is a limit to how much stat vomit they can put on a piece, i doubt they'd wanna waste space on "Limbus: junk", especially pet jobs who are gonna get a whole other page of vomit even if its just acc/macc/racc+50
By Nariont on 2025-06-06 13:10:11
Sylph.Tigerwoods said: »
Is monk still in the game? it's been a while

Still alive and kicking, current content makes it limited but outside of ody/sortie its still a solid choice
By Richybear on 2025-06-06 13:06:59
Asura.Sechs said: »
No cooldown to enter doesn't necessarily mean there's not gonna be a form of gating as in to how much currency you can accrue within a single day, with a jp midnight reset.

I'm not saying there will be such a system in place, just that we can't rule out the chance simply because they claimed there will be no cooldown on entry.


Oh true, plus they set the precedent with Galli that I'm sure they'll have a total cap you can hold, then increase it later on type thing.
By Kaffy on 2025-06-06 13:06:11
still a top DD but weapon versatility is the name of the game for things like Odyssey and monk only having blunt makes them get picked less frequently.
By K123 on 2025-06-06 13:01:29
Bit of a red headed step child. Used less than BLU and DNC now.
By K123 on 2025-06-06 12:59:16
Which tiers will hit 99k on Sortie bosses if wearing emp+3 head and no ea hat+1? Assuming I would only ever use BLM for this, if I will hit 99k MB on T4+5+6+ja without Ea Hat+1 do I even need it?
By Vegetto on 2025-06-06 12:58:05
Is monk still in the game? it's been a while
By Dodik on 2025-06-06 12:46:23
Bismarck.Nickeny said: »
Atrophy boots +4
Description: DEF:100 HP+102 MP+91 STR+27 DEX+26 VIT+31 AGI+47 INT+30 MND+34 CHR+49 Accuracy+71 Evasion+102 Magic Evasion+144 "Magic Def. Bonus"+9 Shield skill +35 Haste+5% Chance of successful block +20 Increased equiped shield size +2 Set: Increases Accuracy, Ranged Accuracy, and Magic Accuracy

Instantly making any Rdm without Aspis a gimp.
By Xilk on 2025-06-06 12:30:03
In Dynamis on bst, I'm usually with a full alliance. I usually bring arthur and melee.

I usually parse it too. I have a fantastic pet MAB set. I usually hit corrosive ooze on the whole crowd right after pld tank spawns a statue or 3. (I also swap to pet pdt set until pld or other take enough hate off my pet).


I find that in wave 1, Arthur generally does as much total damage as I do. which surprises the competitive dd types on the parse because It puts me in 1st or 2nd when I actually add my totals. Pet damage drops off significantly on wave 2, even though it still keeps me in high standing for a dd in the alliance.

However, it is a bit more cumbersome starting fights this way and keeping pet alive if you don't cycle your pet pdt set on for first 20s of each pull.

As far as Aymur and Primal Rend goes, the damage is fantastic but the biggest hit to it is actually the double darkness weather that is permanently in dynamis. IIRC its also always there in Odyssey and Sortie. A sch keeping aurorastorm II on your is a HUGE boon.
If I actually had storm spell, wizards and sam roll, and just use either Zhivago or Bredo as a pet, I'm going to be slamming around 60k primal rend without any geo buffs.
Which means I want to be in a party w/ leaden corsairs, Trueflight Rng, Seraph Blade RDM's for dd's and It fits in quite perfectly for buffs.

I bring arther mainly for the party-wide benefits. attack -33% and def -33% is wonderful alliance support. the AoE damage is just gravy. I think In wave 1 I usually do 11k AoE damage, and in wave 2 its 6k~8k. thats just because higher levels. I also burst 40k on a commander mob the other day which was fun w/ no pet buffs or mdb down at all.

Other pets can be wonderfully fun in dynamis as well. Roland's Jettatura is remarkably effective with double dark weather, making freezing ninjas or other mass aoe damage type mobs completely helpless for plenty of time to rip them apart before they go boom.

Nihility Song is also an underused gem when it comes to claiming large, spread out groups. like 3~4 statues all spread out... you REALLY need your pet pdt set for something like that though.

As far as building tp for the pet, its rather useless. just use the abilities whenever you need them.

ALL ready moves execute at 1000 tp no matter the actual tp of the pet. All warrior type pets (the vast majority of pets are warriors) have fencer trait which means they automatically have over 1500 tp for EVERY ready move.
Nukumi Manoplas +3 add 700 to this so you can always do at least 1700~2200 tp for EVERY ready move. With Aymur this goes up another 500 (yes, only 500 guaranteed, the other 500 is a bit nerfed) so 2200~2700 tp with 2 pieces of equipment all the time.

at most if pet has 800 tp on the meter, then it will always be 3k tp if using both Aymur and Nukumi hands +3. TP bonus equipment covers all the building tp needs for ready moves. and you get charges in 10s. Thats not nearly enough time to build up tp on pet. so its really not worth fussing over beyond having the gear in your ready gear set.
By K123 on 2025-06-06 12:23:19
Weren't the mats in chests for floor up in old limbus? Haven't done it for about 15 years so idr.
By Boposhopo on 2025-06-06 12:19:15
Lingerie said: »
I know its been asked hundreds of times but, could I get ffxi on this?

Getting FFXI to run on the phone directly would be a nightmare to achieve. You could use a service like Geforce Now or Shadow PC. Geforce now has a soft cap of 100hrs a month, with any additional costing extra. Shadow PC is more expensive, but no limit and is basically just access to a virtual install of windows you can log into at any time.
Top
First Page 2 3 ... 320 321 322 ... 332 333 334