Final Fantasy XIV Database - Ffxivpro.com

Eorzea Time
 
 
 
Language: JP EN FR DE
Version 3.1
New Items
users online
Search Term:
In:
Sort By:
Date:
Showing 7441-7470 of 10000
By Goltana101 on 2025-06-06 10:56:18
Bruh, lol...
By Senaki on 2025-06-06 10:53:05
They should scare ppl by adding a ‘# of times // was inputted’.
By quelthos on 2025-06-06 10:52:20
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

-- 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', 'Enhance', 'Potency', 'TH'}

    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', 'HS', 'LS', 'AE', 'SB'}
    -- 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['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",
	})
    sets.precast.CorsairShot.Enhance = sets.precast.CorsairShot


    ------------------------------------------------------------------------------------------------
    ---------------------------------------- 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 customize_idle_set(idleSet)
    if state.Auto_Kite.value == true then
       idleSet = set_combine(idleSet, sets.Kiting)
    end

    return idleSet
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
)

Here is the whole thing, thank you
By Brimstone on 2025-06-06 10:52:13
Tarage said: »
What if the +4 just goes the Besieged route and adds limbus specific buffs?

Because once the novelty of doing the new event wears off there's no reason to do said event anymore. So I think that is extremely unlikely.
By Reiden on 2025-06-06 10:51:32
Taint said: »
Chat Frequency: 835783

Conversations With NPCs: 397670

Parties Joined: 8254

Alliances Joined: 4668

Battles Fought: 2772690

Number of Times KO'd: 9927

Enemies Defeated: 3182638

GM Calls Made: 21

You're smither apprentice beat you in parties joined, get off me!!!!!
By Fenrir.Richybear on 2025-06-06 10:50:08
Bastok --> Highlands would be quick novels, almost everyone would die by Pashhow, then he'd take a 17 year break before writing about Rolanberry
By Felgarr on 2025-06-06 10:42:19
Lakshmi.Sahzi said: »
They need to add some info. Specifically I want to know 3 things:

1. How many times I died.
2. How many people I killed while charmed.
3. Specifically the names of the people I killed while charmed.

#1 is there
By Tarage on 2025-06-06 10:41:59
What if the +4 just goes the Besieged route and adds limbus specific buffs?
By Lingerie on 2025-06-06 10:36:41
Found this on my trending feed:
https://www.tomsguide.com/news/ive-been-testing-the-galaxy-z-fold-5-and-its-the-ultimate-gaming-phone
I know its been asked hundreds of times but, could I get ffxi on this?
By Boposhopo on 2025-06-06 10:36:17
Lakshmi.Sahzi said: »
3. Specifically the names of the people I killed while charmed.

My list would be never ending, I astral Flowed during a besieged and in the time I hit the 2-hour and then diamond dust about half the zone got charmed and I dropped like 50 people. I thought “welp, too late now” popped and elixir and did it again only to find out I hadn’t killed everyone yet.
By Keyser on 2025-06-06 10:33:33
Carbuncle.Gabvanstronger said: »
!! Can't wait to try that update, thanks ^^

I also had a suggestion : think you could add a locked-on design?
Something like


Again, thanks a lot ^^/
Hmmm I should absolutely be able to get something like that working, I'll start playing around with this today in between work. Great idea!

Jhoo said: »
Morning, this lua shows Tp boss ?
This will not show a boss/mobs TP, no.

Kadokawa said: »
I love your addon bro :D
THank you so much for the kind words ^^;
By Creaucent on 2025-06-06 10:32:59
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.

WS sets they cant actually get wrong since they are just copy pasted sets from the All jobs gear sets.
By Carbuncle.Nynja on 2025-06-06 10:31:30
Pantafernando said: »
Bismarck.Nickeny said: »
If I had a billion dollars, I'd hire George R.R. Martin to make a FFXI Anime about Jeuno

I can do the same for 999.999M.
I'm glad you asked that -- Our adventurer just left Windurst to make the trek through La Theine Plateau to Port Jeuno. They were met by hordes of Quadavs along the way.
By CrAZYVIC on 2025-06-06 10:29:06
Shiva.Paulu said: »
Vere or Godhands when R15? I already have Godhands, and 90 Vere.

I'm gearing MNK to help with Odessey. My group is rank0 with our gear if that matters but am well geared aside from that. No primes yet. With that in consideration which weapon would be ideal for that content?

I saw some comments while trying to search that point to switching weapons based on Impetus up or down, is that true?

Another comment suggested Vere wins when Smite skill chains will be happening regularly?

Now, look... I ain't no expert, not by a long shot but if you’re askin’ for a little barstool wisdom, I got a few ideas that might just help you out. Casual talk, man to man... like a couple of drunk *** shootin’ the breeze."


1. Godhands R15.
This baby? This is your go-to for mowing down minions. I’m talkin’ fast, relentless fights — Odyssey runs, Dynamis Divergence waves, EXP parties. One enemy after another? Boom boom boom — Godhands all day.

2. Verethragna R15.
Now this one… you take your time with it. Pop a set a day, no rush, no stress. This is the weapon you bring out when the big boys show up, mini-bosses or anything that doesn’t fall over in 30 seconds. You want that juicy aftermath kicking in and doing work. Boss killers only.

Now, about Monk... yeah, it's a slow TP gainer. People are right about that. But let’s be honest — you’re pretty much always gonna have a Corsair nearby, giving you that tasty Samurai's Roll and Store TP. And let me tell you, that changes everything.

Me? I roll with Monk Ala-THF triple attack gear, Store TP stacked up, and that sweet Sam roll. Ain’t the math-perfect build, but it damn well works. Just don’t forget to check the FFXI calculator, you wanna make sure your TP gear is actually shaving off hits to get to that 1100 TP mark. Remember: Mpaca’s Cap gives +200, Godhands +500, Moonshade Earring +250... that’s 950 bonus TP right there.

Use Tornado Kick when Footwork’s up, Howling Fist when it’s not. The goal? Every WS hits like you’ve got 2000 TP effective tp and ready to explode.

With Vereth? Totally different vibe. I lean into multi-attack rounds and skip the Store TP altogether. Just keep swingin’, let the aftermath handle the rest.

Now, here’s the tricky part, swapping weapons mid-run. That’s an advanced move. Start by practicing on Apex mobs. Then, when you’re in a real event? Trash mobs get the Godhands. Bosses? You bring out Vereth. But pace yourself — that constant swapping can wear you down if you’re not used to it.

Check the spreadsheets, follow the advice the other folks already laid out above. I’m just tossin’ in a casual, outside-the-box take. Take it or leave it.
By Boposhopo on 2025-06-06 10:27:58
Would need to see more than that section of code. Would need to see all rules and functions that handle kiting in the lua. Ideally just providing the entire lua would be easiet, can upload it free to pastebin or something.
By Asura.Iamaman on 2025-06-06 10:26:18
Dodik said: »
No votes yes for creatine?

I thought for sure "I lift heavy weights bro" Nynja would be on the stuff for life.

I have taken it off and on, I originally started because I was on statins for a while and some research suggested that taking creatine can help offset the negative effects of statins. I kept taking it off/on after but I honestly can't say I tell much of a difference in strength/feel/energy/etc. I know some folks swear it makes a difference but I couldn't find any real gains from it on the bike or in the gym.

I do use protein powder, though, because I have a hard time getting enough from my diet and it does seem to help my ability to strength in both areas. I can tell a difference if I don't use it, but it's hard to find protein powder that doesn't taste like ***, isn't full of sugars or weird ***, and isn't obscenely expensive. I was using some for years that did but they changed something and I can't use it anymore.
By . on 2025-06-06 10:19:10
Bismarck.Nickeny said: »
If I had a billion dollars, I'd hire George R.R. Martin to make a FFXI Anime about Jeuno

I can do the same for 999.999M.
By Bismarck.Nickeny on 2025-06-06 10:16:31
If I had a billion dollars, I'd hire George R.R. Martin to make a FFXI Anime about Jeuno
By Atrox78 on 2025-06-06 10:06:36
Klaus's guide on BG is a good start.
By Areaden on 2025-06-06 10:05:31
I just started DRG, whats a good UpToDate guide out there?
By sahzi on 2025-06-06 09:54:15
They need to add some info. Specifically I want to know 3 things:

1. How many times I died.
2. How many people I killed while charmed.
3. Specifically the names of the people I killed while charmed.
By smii on 2025-06-06 09:48:34
Dodik said: »
Sortie basement melee, non kite, with Drg is about the hardest content you can do. When we have Drg there, stage4 polearm, the wyvern still goes plop at, for example, Aita/H.

Can confirm, H G E boss design is rough on the wyvern. Dawn mulsims really worked well and SE really needs to make them stack.
By JaysinRamuh on 2025-06-06 09:48:30
Link is expired again. Any chance you can reopen it?
By Brimstone on 2025-06-06 09:33:41
Asura.Sechs said: »
Carbuncle.Nynja said: »
I wonder if there will be any +4 pieces that will change a previously useless piece by adding something useful to it.
That would likely require individual adjustments to each piece, which would be great but I honestly doubt it's gonna happen because of the sheer amount of pieces that they would have to individually adjust (220 to be exact).

So... possible? Yes! Likely? Alas no.

Agreed with this but even just doing +1 to the special stat and + 5/10 to everything else (DEF/acc/att/STR/DEX..) would probably make a few pieces relevant again.

I could see where they do the above and add something like PDL or -DT to 1 or 2 pieces to each set as well. (if 3/5 empy have -DT i could see them adding it to 1 relic and 1 AF piece for each job - which could then hit -DT 50% standing a mix or AF/relic/empy)

I'm not holding my breath. Although if the +4 is good (for AF at least) it would justify the gil sink for the +3.
By K123 on 2025-06-06 09:20:08
What content?
By Nariont on 2025-06-06 09:18:49
pup/bst/smn are safe solo jobs but as mentioned they are on the slower side, in exchange for being pretty sturdy though debuffs can be a huge issue. OD pup/ AFAC smn can still drop a nice chunk off a mob but otherwise a regular DD in just about any variety is better speed wise.
By K123 on 2025-06-06 09:15:21
Slore said: »
Having a hard time self sc'ing even with haste 2.
Not surprising, it's not easy. Why not call Ulmia?
By smii on 2025-06-06 09:11:03
They should have made it more flattering. Something like "X player admires you."
By . on 2025-06-06 09:03:34
Fighting community is blowing up about a 4v4 Marvel fighting game that doesn't involve Capcom. RIP.
By Akumasama on 2025-06-06 09:02:27
Carbuncle.Nynja said: »
I wonder if there will be any +4 pieces that will change a previously useless piece by adding something useful to it.
That would likely require individual adjustments to each piece, which would be great but I honestly doubt it's gonna happen because of the sheer amount of pieces that they would have to individually adjust (220 to be exact).

So... possible? Yes! Likely? Alas no.
Top
First Page 2 3 ... 248 249 250 ... 332 333 334