|
Gearswap Support Thread
Phoenix.Akago
Serveur: Phoenix
Game: FFXI
Posts: 1
By Phoenix.Akago 2024-03-25 13:26:25
Ok how would I go about coding my lua so that while on drk if I use scarlet delirium it will equip a certain set until I take the first hit?
If the buff for Scarlet Delirium is removed when you are hit (don't DRK personally), you could use a buff state gain check to
force you into your SD set while you have the buff, then a buff state loss to remove the forced SD set when you lose it.
I'm not sure best implementation for you personally, as it would depend if you want it to override all your sets (casting, WS, whatever), or just your idle/engaged set.
Serveur: Asura
Game: FFXI
Posts: 491
By Asura.Clintbeastwood 2024-03-25 14:05:07
I have what he's asking for my in DRK lua. It's gotten me killed a few times so I've throttled back the Ratri but it stays applied until I take the hit. Once the buffactive scarlet delirium is gone, it swaps back to whatever the current gear state is.
Kurd, I'll send it to you in discord.
Serveur: Asura
Game: FFXI
Posts: 22
By Asura.Kurdtray 2024-03-28 20:23:50
the problem is you get a buff and then when hit the buff icon changes but it is still called scarlet delirium. I know sublimation does something similar but each part of it has a slightly unique name, but I can't figure out how to tell between the two buffs for scarlet.
Carbuncle.Nynja
Serveur: Carbuncle
Game: FFXI
Posts: 4089
By Carbuncle.Nynja 2024-03-28 20:32:46
Theres two buffs in the resources file showing Scarlet Delirium (479 and 480). Is there a way in GS to use buff ID instead of name?
Serveur: Asura
Game: FFXI
Posts: 22
By Asura.Kurdtray 2024-03-28 21:17:31
Yes i just found that and have got it figured out. the code works as follows for anyone else wanting to do this
if buffactive[479] then
this will register only the first code of it not its follow up which is 480. Thanks everyone for your suggestions
[+]
Serveur: Asura
Game: FFXI
Posts: 3
By Asura.Exxcalibur 2024-04-04 09:21:05
Im having an issue where I'm stuck in my idle gear, even when I change it manually. If I equip a warp ring, it instantly switches back to my idle rings. blu.lua I made multiple attempts to play with Aftercast, Idlestates, and commands but I'm pulling my hair out here now.
Serveur: Asura
Game: FFXI
Posts: 176
By Asura.Yottaxa 2024-04-04 11:46:20
Im having an issue where I'm stuck in my idle gear, even when I change it manually. If I equip a warp ring, it instantly switches back to my idle rings. blu.lua I made multiple attempts to play with Aftercast, Idlestates, and commands but I'm pulling my hair out here now.
I am not seeing anything glaring and even ran a quick test or two and not sure. You could try using //gs debugmode (Its a toggle on / off command) and watching it happen to catch where the issue is. If I find something I'll let you know.
Serveur: Asura
Game: FFXI
Posts: 3
By Asura.Exxcalibur 2024-04-04 12:39:46
I've tried that lua and I tried Arislan's for blue as well and both are getting spammed "Entering self_command" when I enter debug mode.
Serveur: Asura
Game: FFXI
Posts: 176
By Asura.Yottaxa 2024-04-04 15:00:37
I've tried that lua and I tried Arislan's for blue as well and both are getting spammed "Entering self_command" when I enter debug mode.
It looks like the logic on lines 1191-1199 could be doing that - I'm not sure that the engaged / idle function belongs in self command like that. (Should be handled in status_change afaik) Test commenting that section? (Not familiar with that lua so it could break stuff but would rule things out)
By Dodik 2024-04-05 08:59:07
That sounds like Selindrile's based luas and it is a feature.
Idle set gets put back on if you change it manually and gearswap updates character state.
Updates happen on
a) Character moving
b) Something being cast on character, or ability used that affects character (ie, a buff).
c) Character doing something, ja, spell, item, w/e
If you want to use a warp ring change it manually and do not move or do anything with the character until you can use it.
Or disable that slot with 'gs disable right_ring' or similar temporarily.
Some addons like myhome do this, disabling the slot while using an item, automatically.
By drakefs 2024-04-05 16:50:03
Im having an issue where I'm stuck in my idle gear, even when I change it manually. If I equip a warp ring, it instantly switches back to my idle rings. blu.lua I made multiple attempts to play with Aftercast, Idlestates, and commands but I'm pulling my hair out here now.
I would not recommend that lua unless you are the one who created\maintains it. There is a lot going on and it produces some weird debug messages (such as using alt-e).
That being said, I could not replicate the issue you described. There may be some requirement that I do not have setup for the lua. If I equip a warp ring and use it, from the menu, the lua does not swap any gear and the ring warps me. I tested in non-city zone.
Carbuncle.Nynja
Serveur: Carbuncle
Game: FFXI
Posts: 4089
By Carbuncle.Nynja 2024-04-05 17:39:43
Updates happen on
a) Character moving People with ***like this wonder why the games so *** laggy.
Serveur: Asura
Game: FFXI
Posts: 3
By Asura.Exxcalibur 2024-04-05 21:25:04
I appreciate you guys checking it out. I'll try starting again with some fresh Luas. I'm still relearning all of this so it's probably my fault somewhere.
By drakefs 2024-04-05 21:48:01
People with ***like this wonder why the games so *** laggy.
The game is "so *** laggy" because the servers are across the world and the network stack is 20+ years old.
It is so simple to check, jut play vanilla. Does it still lag? Yup.
[+]
By Hopalong 2024-04-05 21:55:40
You can try this one. I decided that warp rings need a toggle. I toggle off right as animation wears.
No guarantee it works cause I haven't played in awhile but with a little polish and personalization Arislan's luas are adaptable.
There's no auto change according to haste levels etc because I found that put too much load on the game and I felt too sweaty try-hard to justify it. I cut all that out.
Code -- Original: Motenten / Modified: Arislan / Modified: Hopalong
function get_sets()
mote_include_version = 2
include('Mote-Include.lua')
end
-----------------------------------------------------------
function job_setup()
include('Mote-TreasureHunter')
update_melee_groups()
-- Elemental Weaponskill
elemental_ws = S{"Aeolian Edge", "Flash Nova", 'Seraph Strike', 'Shining Strike', 'Sanguine Blade', 'Seraph Blade', 'Shining Blade',}
-- Moonshade Earring
moonshade_WS = S{'Savage Blade', 'Aeolian Edge', 'Chant du Cygne', 'Sanguine Blade', 'Seraph Blade', 'Shining Blade', 'Flat Blade', 'Red Lotus Blade', 'Burning Blade', 'Vorpal Blade', 'Circle Blade', 'Judgement', 'Skullbreaker', 'Moonlight', 'Starlight', 'Brainshaker', 'Seraph Strike', 'Shining Strike', 'Black Halo'}
-- Rune Enchantments
rune_enchantments = S{'Ignis', 'Gelus', 'Flabra', 'Tellus', 'Sulpor', 'Unda', 'Lux','Tenebrae'}
-- Blue Magic Mapping
blue_magic_maps = {}
-- Physical spells with no particular (or known) stat mods
blue_magic_maps.Physical = S{'Bilgestorm'}
-- Spells with heavy accuracy penalties, that need to prioritize accuracy first.
blue_magic_maps.PhysicalAcc = S{'Heavy Strike'}
-- Physical spells with Str stat mod
blue_magic_maps.PhysicalStr = S{'Battle Dance','Bloodrake','Death Scissors','Dimensional Death',
'Empty Thrash','Quadrastrike','Saurian Slide','Sinker Drill','Spinal Cleave','Sweeping Gouge',
'Uppercut','Vertical Cleave'}
-- Physical spells with Dex stat mod
blue_magic_maps.PhysicalDex = S{'Amorphic Spikes','Asuran Claws','Barbed Crescent','Claw Cyclone',
'Disseverment','Foot Kick','Frenetic Rip','Goblin Rush','Hysteric Barrage','Paralyzing Triad',
'Seedspray','Sickle Slash','Smite of Rage','Terror Touch','Thrashing Assault','Vanity Dive'}
-- Physical spells with Vit stat mod
blue_magic_maps.PhysicalVit = S{'Body Slam','Cannonball','Delta Thrust','Glutinous Dart','Grand Slam',
'Power Attack','Quad. Continuum','Sprout Smack','Sub-zero Smash'}
-- Physical spells with Agi stat mod
blue_magic_maps.PhysicalAgi = S{'Benthic Typhoon','Feather Storm','Helldive','Hydro Shot','Jet Stream',
'Pinecone Bomb','Spiral Spin','Wild Oats'}
-- Physical spells with Int stat mod
blue_magic_maps.PhysicalInt = S{'Mandibular Bite','Queasyshroom'}
-- Physical spells with Mnd stat mod
blue_magic_maps.PhysicalMnd = S{'Ram Charge','Screwdriver','Tourbillion'}
-- Physical spells with Chr stat mod
blue_magic_maps.PhysicalChr = S{'Bludgeon'}
-- Physical spells with HP stat mod
blue_magic_maps.PhysicalHP = S{'Final Sting'}
-- Magical spells with the typical Int mod
blue_magic_maps.Magical = S{'Anvil Lightning','Blastbomb','Blazing Bound','Bomb Toss','Cursed Sphere',
'Droning Whirlwind','Embalming Earth','Entomb','Firespit','Foul Waters','Ice Break','Leafstorm',
'Maelstrom','Molting Plumage','Nectarous Deluge','Regurgitation','Rending Deluge','Scouring Spate',
'Silent Storm','Spectral Floe','Subduction','Tem. Upheaval','Water Bomb'}
-- Magical spells Dark affinity
blue_magic_maps.MagicalDark = S{'Dark Orb','Death Ray','Eyes On Me','Evryone. Grudge','Palling Salvo',
'Tenebral Crush'}
-- Magical spells Light affinity
blue_magic_maps.MagicalLight = S{'Blinding Fulgor','Diffusion Ray','Radiant Breath','Rail Cannon',
'Retinal Glare'}
-- Magical spells with a primary Mnd mod
blue_magic_maps.MagicalMnd = S{'Acrid Stream','Magic Hammer','Mind Blast'}
-- Magical spells with a primary Chr mod
blue_magic_maps.MagicalChr = S{'Mysterious Light'}
-- Magical spells with a Vit stat mod (on top of Int)
blue_magic_maps.MagicalVit = S{'Thermal Pulse'}
-- Magical spells with a Dex stat mod (on top of Int)
blue_magic_maps.MagicalDex = S{'Charged Whisker','Gates of Hades'}
-- Magical spells (generally debuffs) that we want to focus on magic accuracy over damage.
-- Add Int for damage where available, though.
blue_magic_maps.MagicAccuracy = S{'1000 Needles','Absolute Terror','Actinic Burst','Atra. Libations',
'Auroral Drape','Awful Eye', 'Blank Gaze','Blistering Roar','Blood Saber','Chaotic Eye',
'Cimicine Discharge','Cold Wave','Corrosive Ooze','Demoralizing Roar','Digest','Dream Flower',
'Enervation','Feather Tickle','Filamented Hold','Frightful Roar','Geist Wall','Hecatomb Wave',
'Infrasonics','Jettatura','Light of Penance','Lowing','Mind Blast','Mortal Ray','MP Drainkiss',
'Osmosis','Reaving Wind','Sandspin','Sandspray','Sheep Song','Soporific','Sound Blast',
'Stinking Gas','Sub-zero Smash','Venom Shell','Voracious Trunk','Yawn'}
-- Breath-based spells
blue_magic_maps.Breath = S{'Bad Breath','Flying Hip Press','Frost Breath','Heat Breath','Hecatomb Wave',
'Magnetite Cloud','Poison Breath','Self-Destruct','Thunder Breath','Vapor Spray','Wind Breath'}
-- Stun spells
blue_magic_maps.StunPhysical = S{'Frypan','Head Butt','Sudden Lunge','Tail slap','Whirl of Rage'}
blue_magic_maps.StunMagical = S{'Blitzstrahl','Temporal Shift','Thunderbolt'}
-- Healing spells
blue_magic_maps.Healing = S{'Healing Breeze','Magic Fruit','Plenilune Embrace','Pollen','Restoral',
'Wild Carrot'}
-- Buffs that depend on blue magic skill
blue_magic_maps.SkillBasedBuff = S{'Barrier Tusk','Diamondhide','Magic Barrier','Metallic Body',
'Plasma Charge','Pyric Bulwark','Reactor Cool','Occultation'}
-- Other general buffs
blue_magic_maps.Buff = S{'Amplification','Animating Wail','Carcharian Verve','Cocoon',
'Erratic Flutter','Exuviation','Fantod','Feather Barrier','Harden Shell','Memento Mori',
'Nat. Meditation','Orcish Counterstance','Refueling','Regeneration','Saline Coat','Triumphant Roar',
'Warm-Up','Winds of Promyvion','Zephyr Mantle'}
blue_magic_maps.Refresh = S{'Battery Charge'}
-- Spells that require Unbridled Learning to cast.
unbridled_spells = S{'Absolute Terror','Bilgestorm','Blistering Roar','Bloodrake','Carcharian Verve','Cesspool',
'Crashing Thunder','Cruel Joke','Droning Whirlwind','Gates of Hades','Harden Shell','Mighty Guard',
'Polar Roar','Pyric Bulwark','Tearing Gust','Thunderbolt','Tourbillion','Uproot'}
end
-----------------------------------------------------------
function user_setup()
-- Blue Mage Modes
state.IdleMode:options('Normal', 'DT', 'Evasion')
state.OffenseMode:options('Normal', 'HasteII', 'HighHP')
state.HybridMode:options('Normal', 'Armored', 'Evasion')
state.WeaponskillMode:options('Normal', 'WSHP')
-- Defense Modes.
state.PhysicalDefenseMode:options('PDT')
state.MagicalDefenseMode:options('MDT')
-- Extra Defense Modes
state.ExtraDefenseMode = M{['description']='Extra Defense Mode', 'None', 'MaxHP'}
-- Weapon Set
state.WeaponSet = M{['description']='Weapon Set', 'Naegling', 'Tanmogayi', 'Rounsey'}
-- Sub Set
state.SubSet = M{['description']='SubSet', 'Zantetsuken', 'Genbu'}
-- Ranged Set
state.RangedSet = M{['description']='Ranged Set', 'None', 'Trollbane'}
-- Main/Sub Weapon Lock
state.WeaponLock = M(false, 'Weapon Lock')
-- Ranged Weapon Lock
state.RangedLock = M(false, 'Ranged Lock')
-- Runes
state.Runes = M{['description']='Runes', 'Ignis', 'Gelus', 'Flabra', 'Tellus', 'Sulpor', 'Unda', 'Lux', 'Tenebrae'}
-- Job Abilities
state.Buff['Burst Affinity'] = buffactive['Burst Affinity'] or false
state.Buff['Chain Affinity'] = buffactive['Chain Affinity'] or false
state.Buff.Convergence = buffactive.Convergence or false
state.Buff.Diffusion = buffactive.Diffusion or false
state.Buff.Efflux = buffactive.Efflux or false
state.Buff['Unbridled Learning'] = buffactive['Unbridled Learning'] or false
-- Doom
state.Buff.Doom = buffactive.doom or false
-- Magic Burst
state.MagicBurst = M(false, 'Magic Burst')
-- Kiting
state.Kiting = M(false, 'Kiting')
-- Knockback
state.Knockback = M(false, 'Knockback')
-- WarpRings
state.WarpRings = M(false, "WarpRings")
-- Target Distance
target_distance = 5.5
--[[
-- [ F9 ] Cycle Offense Modes
-- [ CTRL+F9 ] Cycle Attack Mode
-- [ ALT+F9 ] Cycle Weapon Skill Modes
-- [ F10 ] Cycle Hybrid Mode
-- [ CTRL+F10 ] Toggle Kiting
-- [ ALT+F10 ] Toggle Knockback
-- [ F11 ] Cycle Defense Modes
-- [ CTRL+F11 ] Reset Defense Mode
-- [ ALT+F11 ] Cycle ExtraDefenseMode
-- [ F12 ] Update/Report Current Gear
-- [ CTRL+F12 ] Cycle Idle Modes
-- [ ALT+F12 ]
-- [ WIN+F12 ] Toggle WarpRings
-- [ WIN+Q ] Main Weapon Change
-- [ WIN+W ] Weapons Lock
-- [ WIN+E ] Sub Weapon Change
-- [ WIN+R ] Ranged Set
-- [ WIN+T ] Ranged Lock
-- [ Delete ] Ranged Attack
-- [ ALT+J ] Super Jump
-- [ ALT+H ] Haste Samba
-- [ ALT+G ] Curing Waltz III
-- [ CTRL+= ] Treasure Mode
-- [ END ]
-- [ PAGEDOWN ]
-- [ PAGEUP ]
-- [ NUMLOCK ]
--]]
-- F9-F12:
send_command('bind f9 gs c cycle OffenseMode')
send_command('bind ^f9 gs c cycle AttackMode')
send_command('bind !f9 gs c WeaponskillMode')
send_command('bind f10 gs c cycle HybridMode')
send_command('bind ^f10 gs c cycle Kiting')
send_command('bind !f10 gs c cycle Knockback')
send_command('bind f11 gs c cycle DefenseMode')
send_command('bind ^f11 gs c reset DefenseMode')
send_command('bind !f11 gs c cycle ExtraDefenseMode')
send_command('bind f12 gs c update user')
send_command('bind ^f12 gs c cycle IdleMode')
send_command('bind !f12 gs c ')
-- Weapon Set: [ WIN+Q ]
send_command('bind @q gs c cycle WeaponSet')
-- Sub Set: [ WIN+E ]
send_command('bind @e gs c cycle SubSet')
-- Weapon Lock: [ WIN+W ]
send_command('bind @w gs c toggle WeaponLock')
-- Ranged Set: [ WIN+R ]
send_command('bind @r gs c cycle RangedSet')
-- Ranged Lock: [ WIN+T ]
send_command('bind @t gs c toggle RangedLock')
-- Ranged Attack: [ DELETE ]
send_command('bind delete input /ra <t>')
-- Cycle Runes: [ CTRL+Delete ]
send_command('bind ^delete gs c cycle Runes')
-- Use Runes: [ ALT+Delete ]
send_command('bind !Delete input //gs c rune')
-- Super Jump: [ ALT+J ]
send_command('bind !j input /ja "Super Jump" <t>')
-- Haste Samba: [ ALT+H ]
send_command('bind !h input /ja "Haste Samba" <me>')
-- Curing Waltz III: [ ALT+G ]
send_command('bind !g input /ja "Curing Waltz III" <me>')
-- Treasure Mode: [ CTRL+= ]
send_command('bind ^= gs c cycle treasuremode')
-- WarpRings [ WIN+F12 ]
send_command('bind @f12 gs c toggle WarpRings')
-- Occultation [ [ ] [ ] ]
send_command('bind %[ input /ma "Occultation" <me>')
-- Utsusemi: Ni [ ] ]
send_command('bind %] input /ma "Utsusemi: Ni" <me>')
-- xxx [ END ]
-- xxx [ PAGEDOWN ]
-- xxx [ PAGEUP ]
-- Enable all:
send_command('gs enable all')
-- Azuresets
send_command('lua l azureSets')
-- Numpad:
send_command('bind numlock ')
send_command('bind ^numpad/ input ')
send_command('bind ^numpad* input ')
send_command('bind ^numpad+ input ')
send_command('bind ^numpad- input ')
send_command('bind ^numpad0 input ')
-- [ Numpad7 ] Savage Blade
-- [ Numpad8 ] Chant du Cygne
-- [ Numpad9 ] Sanguine Blade
-- [ Numpad4 ] xxx
-- [ Numpad5 ] xxx
-- [ Numpad6 ] Aeolian Edge
-- [ Numpad1 ] xxx
-- [ Numpad2 ] xxx
-- [ Numpad3 ] xxx
send_command('bind numpad7 input /ws "Savage Blade" <t>')
send_command('bind numpad8 input /ws "Chant du Cygne" <t>')
send_command('bind numpad9 input /ws "Sanguine Blade" <t>')
--send_command('bind numpad4 input /ws "xxx" <t>')
--send_command('bind numpad5 input /ws "xxx" <t>')
send_command('bind numpad6 input /ws "Aeolian Edge" <t>')
--send_command('bind numpad1 input /ws "xxx" <t>')
--send_command('bind numpad2 input /ws "xxx" <t>')
--send_command('bind numpad3 input /ws "xxx" <t>')
end
-----------------------------------------------------------
function user_unload()
send_command('unbind ^f9')
send_command('unbind ^f10')
send_command('unbind ^f11')
send_command('unbind ^f12')
send_command('unbind !f9')
send_command('unbind !f10')
send_command('unbind !f11')
send_command('unbind !f12')
send_command('unbind @f9')
send_command('unbind @f10')
send_command('unbind @f11')
send_command('unbind @f12')
send_command('unbind @a')
send_command('unbind @w')
send_command('unbind @e')
send_command('unbind @q')
send_command('unbind @c')
send_command('unbind @p')
send_command('unbind @d')
send_command('unbind @h')
send_command('unbind Delete')
send_command('unbind !j')
send_command('unbind !h')
send_command('unbind ^`')
send_command('unbind ^=')
send_command('unbind end')
send_command('unbind pagedown')
send_command('unbind pageup')
send_command('unbind numlock')
send_command('unbind ^numpad/')
send_command('unbind ^numpad*')
send_command('unbind ^numpad-')
send_command('unbind ^numpad+')
send_command('unbind ^numpad0')
send_command('unbind numpad7')
send_command('unbind numpad8')
send_command('unbind numpad9')
send_command('unbind numpad4')
send_command('unbind numpad5')
send_command('unbind numpad6')
send_command('unbind numpad1')
send_command('unbind numpad2')
send_command('unbind numpad3')
send_command('unbind %[')
send_command('unbind %]')
send_command('lua u azureSets')
send_command('lua u DressUp')
end
------------------------------------------------------------
function init_gear_sets()
------------------------ Precast Sets --------------------
-- Treasure Hunter Sets (need +5 in gear)
sets.TreasureHunter = {
--ammo="Perfect Lucky Egg",
waist="Chaac Belt",
legs={ name="Herculean Trousers", augments={'Phys. dmg. taken -2%','Mag. Acc.+16','"Treasure Hunter"+2','Mag. Acc.+20 "Mag.Atk.Bns."+20',}},
feet={ name="Herculean Boots", augments={'MND+6','Pet: "Regen"+1','"Treasure Hunter"+2','Accuracy+6 Attack+6','Mag. Acc.+15 "Mag.Atk.Bns."+15',}},}
------------------------------------------------------------
---------------------- Precast Sets ------------------------
------------------------------------------------------------
-- Job Abilities
--sets.precast.JA['Provoke'] = sets.Enmity
sets.buff['Burst Affinity'] = {legs="Assim. Shalwar +3", feet="Hashi. Basmak +3"}
sets.buff['Diffusion'] = {feet="Luhlaza Charuqs +1"}
sets.buff['Efflux'] = {legs="Hashishin Tayt +2"}
sets.precast.JA['Azure Lore'] = {hands="Luh. Bazubands +1"}
sets.precast.JA['Chain Affinity'] = {feet="Assim. Charuqs +1"}
sets.precast.JA['Convergence'] = {head="Luh. Keffiyeh +3"}
sets.precast.JA['Enchainment'] = {body="Luhlaza Jubbah +3"}
sets.precast.JA['Sneak Attack'] = sets.buff['Sneak Attack']
sets.precast.JA['Trick Attack'] = sets.buff['Trick Attack']
-- Waltz
sets.precast.Waltz = {
legs="Dashing Subligar",}
-- Healing Waltz
sets.precast.Waltz['Curing Waltz III'] = {
ammo="Brigantia Pebble",
head="Nyame Helm",
body="Passion Jacket",
hands={ name="Taeon Gloves", augments={'Mag. Evasion+20','"Waltz" potency +5%','"Regen" potency+3',}},
legs="Dashing Subligar",
feet={ name="Taeon Boots", augments={'Mag. Evasion+20','"Waltz" potency +5%','"Regen" potency+3',}},
neck={ name="Loricate Torque +1", augments={'Path: A',}},
waist="Eschan Stone",
left_ear="Ethereal Earring",
right_ear="Eabani Earring",
left_ring="Defending Ring",
right_ring="Shadow Ring",
back="Moonbeam Cape",}
-- Fast Cast Sets
-- Default Fast Cast `
sets.precast.FC = {
main="Iris",
sub="Sakpata's Sword",
head={ name="Carmine Mask", augments={'Accuracy+15','Mag. Acc.+10','"Fast Cast"+3',}},
body="Dread Jupon",
hands={ name="Leyline Gloves", augments={'Accuracy+14','Mag. Acc.+13','"Mag.Atk.Bns."+13','"Fast Cast"+2',}},
legs="Enif Cosciales",
feet={ name="Carmine Greaves +1", augments={'HP+80','MP+80','Phys. dmg. taken -4',}},
neck="Voltsurge Torque",
waist="Eschan Stone",
left_ear="Loquac. Earring",
right_ear="Mendi. Earring",
left_ring="Kishar Ring",
right_ring="Naji's Loop",
back="Moonbeam Cape",}
-- Fast Cast 78%
-- HP 2368
-- MP 1367
sets.precast.FC.HP = set_combine(sets.precast.FC, {})
-- Call Trust
sets.precast['Trust'] = set_combine(sets.precast.FC, {})
-- Utsusemi
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {body="Passion Jacket"})
-- Fast Cast Blue Magic --
sets.precast.FC['Blue Magic'] = set_combine(sets.precast.FC, {body="Hashishin Mintan +3"})
sets.precast.FC['Blue Magic'].HP = set_combine(sets.precast.FC, {body="Hashishin Mintan +3"})
-- Fast Cast Healing Magic Cures --
sets.precast.FC.Cure = set_combine(sets.precast.FC, {ear2="Mendi. Earring", waist="Acerbic Sash +1", right_ring="Naji's Loop"})
sets.precast.FC.Cure.HP = set_combine(sets.precast.FC, {ear2="Mendi. Earring", waist="Acerbic Sash +1", right_ring="Naji's Loop"})
--Ranged Midcast Treasure Hunter Pull --
sets.midcast.RA = {}
------------------------------------------------------------
---------------------- Weaponskill Sets --------------------
------------------------------------------------------------
-- state.WeaponskillMode:options('Normal', 'HP')
-- state.WeaponskillMode:options('Normal', 'WSHP')
-- Default
sets.precast.WS = {
ammo="Oshasha's Treatise",
head="Hashishin Kavuk +3",
body={ name="Herculean Vest", augments={'STR+3','AGI+8','Weapon skill damage +8%','Accuracy+12 Attack+12','Mag. Acc.+5 "Mag.Atk.Bns."+5',}},
hands={ name="Herculean Gloves", augments={'Accuracy+10','Pet: DEX+5','Weapon skill damage +9%','Accuracy+6 Attack+6','Mag. Acc.+8 "Mag.Atk.Bns."+8',}},
legs={ name="Augury Cuisses +1", augments={'Path: A',}},
feet="Hashi. Basmak +3",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Ishvara Earring",
right_ear="Hashi. Earring +1",
left_ring="Rufescent Ring",
right_ring="Ilabrat Ring",
back="Vespid Mantle",}
-- HP = 2195
-- STR = +175
-- Dex = +168
-- Accuracy = 1045
-- Attack = 1248
-- HP Weaponskill
sets.precast.WS.WSHP = set_combine(sets.precast.WS, {})
-- Specific Weaponskills
-- sets.precast.WS
-- sets.precast.WS.WSHP
-- Chant du Cygne: 3hit, critical varies with TP, 80% Dex, 15%/25%/40%
sets.precast.WS['Chant du Cygne'] = set_combine(sets.precast.WS, {ear1="Odr Earring",})
sets.precast.WS['Chant du Cygne'].WSHP = set_combine(sets.precast.WS, {})
-- Vorpal Blade: 4hit, critical varies with TP, 60% Str, ?/?/?
sets.precast.WS['Vorpal Blade'] = sets.precast.WS['Chant du Cygne']
sets.precast.WS['Vorpal Blade'].WSHP = sets.precast.WS['Chant du Cygne'].WSHP
-- Savage Blade: 2hit, Damage varies with TP, 50% Str, 50% Mnd, 4.0/10.25/13.75
sets.precast.WS['Savage Blade'] = set_combine(sets.precast.WS, {neck="Rep. Plat. Medal", back="Phalangite Mantle", waist="Sailfi Belt +1"})
sets.precast.WS['Savage Blade'].WSHP = set_combine(sets.precast.WS['Savage Blade'], {})
-- True Strike: Critical damage, Accuracy varies with TP, 100% Str, -50/0/+50
sets.precast.WS['True Strike'] = sets.precast.WS['Savage Blade']
sets.precast.WS['True Strike'].WSHP = sets.precast.WS['True Strike'].WSHP
-- Expiacion: 2hit, Damage varies with TP, 30% Str, Int, Dex, 3.8/9.4/12.2
sets.precast.WS['Expiacion'] = sets.precast.WS['Savage Blade']
sets.precast.WS['Expiacion'].WSHP = sets.precast.WS['Savage Blade'].WSHP
-- Black Halo: 2hit, Damage varies with TP, 70% Mnd, 30% Str, 3.0/7.25/9.75
sets.precast.WS['Black Halo'] = sets.precast.WS['Savage Blade']
sets.precast.WS['Black Halo'].WSHP = sets.precast.WS['Savage Blade'].WSHP
-- Requiescat: 5hit, nonelemental, Attack varies with TP, 85% Mnd, -20%/-10%/-0%
sets.precast.WS['Requiescat'] = sets.precast.WS
sets.precast.WS['Requiescat'].WSHP = set_combine(sets.precast.WS['Requiescat'], {})
-- Realmrazer: 7hit, Accuracy varies with TP, 85% Mnd, ?/?/?
sets.precast.WS['Realmrazer'] = sets.precast.WS['Requiescat']
sets.precast.WS['Realmrazer'].WSHP = sets.precast.WS['Requiescat'].WSHP
-- Sanguine Blade: Drains HP, Amount varies with TP, 50% Mnd, 30% Str, 50%, 100%, 160%
sets.precast.WS['Sanguine Blade'] = set_combine(sets.precast.WS, {
ammo={ name="Ghastly Tathlum +1", augments={'Path: A',}},
head="Hashishin Kavuk +3",
body="Hashishin Mintan +3",
hands="Jhakri Cuffs +2",
legs={ name="Augury Cuisses +1", augments={'Path: A',}},
feet="Hashi. Basmak +3",
neck="Sibyl Scarf",
waist="Sacro Cord",
left_ear="Friomisi Earring",
right_ear="Crematio Earring",
left_ring="Mephitas's Ring",
right_ring={ name="Metamor. Ring +1", augments={'Path: A',}},
back="Izdubar Mantle",})
sets.precast.WS['Sanguine Blade'].WSHP = set_combine(sets.precast.WS, {})
-- Flash Nova: Light elemental damag, 50% Str, 50% Mnd,
sets.precast.WS['Flash Nova'] = sets.precast.WS['Sanguine Blade']
sets.precast.WS['Flash Nova'].WSHP = sets.precast.WS['Sanguine Blade'].WSHP
-- Aeolian Edge Set
sets.precast.WS['Aeolian Edge'] = sets.precast.WS['Sanguine Blade']
sets.precast.WS['Aeolian Edge'].TH = set_combine(sets.precast.WS['Aeolian Edge'], sets.TreasureHunter)
-- Evisceration
-- Earth Crusher
sets.precast.WS['Earth Crusher'] = set_combine(sets.precast.WS['Sanguine Blade'], {neck="Quanpur Necklace"})
sets.precast.WS['Earth Crusher'].WSHP = sets.precast.WS['Sanguine Blade'].WSHP
----------------------------------------------------------------------
----------------------------- Midcast Sets ---------------------------
----------------------------------------------------------------------
sets.midcast.FastRecast = sets.precast.FC
sets.midcast.SIRD = {
--ammo="Staunch Tathlum",
head="Nyame Helm",
body="Nyame Mail",
hands="Nyame Gauntlets",
legs={ name="Carmine Cuisses +1", augments={'HP+80','STR+12','INT+12',}},
feet={ name="Amalric Nails", augments={'Mag. Acc.+11','"Mag.Atk.Bns."+11','"Conserve MP"+5',}},
neck={ name="Loricate Torque +1", augments={'Path: A',}},
waist="Cornelia's Belt",
left_ear="Eabani Earring",
right_ear="Ethereal Earring",
left_ring="Defending Ring",
right_ring={ name="Gelatinous Ring +1", augments={'Path: A',}},
back="Repulse Mantle",}
-- HP =
-- MP =
-- DT =
-- SIRD =
sets.midcast.Utsusemi = sets.midcast.SIRD
sets.midcast['Blue Magic'] = sets.midcast.SIRD
-- Physical spells with Str stat mod
sets.midcast['Blue Magic'].Physical = {}
-- Spells with heavy accuracy penalties, that need to prioritize accuracy first.
sets.midcast['Blue Magic'].PhysicalAcc = set_combine(sets.midcast['Blue Magic'].Physical, {})
-- Physical spells with Str stat mod
sets.midcast['Blue Magic'].PhysicalStr = sets.midcast['Blue Magic'].Physical
-- Physical spells with Dex stat mod
sets.midcast['Blue Magic'].PhysicalDex = set_combine(sets.midcast['Blue Magic'].Physical, {})
-- Physical spells with Vit stat mod
sets.midcast['Blue Magic'].PhysicalVit = sets.midcast['Blue Magic'].Physical
-- Physical spells with Agi stat mod
sets.midcast['Blue Magic'].PhysicalAgi = set_combine(sets.midcast['Blue Magic'].Physical, {})
-- Physical spells with Int stat mod
sets.midcast['Blue Magic'].PhysicalInt = set_combine(sets.midcast['Blue Magic'].Physical, { })
-- Physical spells with Mnd stat mod
sets.midcast['Blue Magic'].PhysicalMnd = set_combine(sets.midcast['Blue Magic'].Physical, { })
-- Physical spells with Chr stat mod
sets.midcast['Blue Magic'].PhysicalChr = set_combine(sets.midcast['Blue Magic'].Physical, {ear1="Regal Earring", ear2="Enchntr. Earring +1"})
-- Magical spells with the typical Int mod
sets.midcast['Blue Magic'].Magical = {
main="Naegling",
sub="Sakpata's Sword",
ammo={ name="Ghastly Tathlum +1", augments={'Path: A',}},
head={ name="Herculean Helm", augments={'"Mag.Atk.Bns."+21','Pet: Attack+24 Pet: Rng.Atk.+24','STR+4 DEX+4','Accuracy+20 Attack+20','Mag. Acc.+15 "Mag.Atk.Bns."+15',}},
body="Hashishin Mintan +3",
hands="Jhakri Cuffs +2",
legs={ name="Augury Cuisses +1", augments={'Path: A',}},
feet={ name="Amalric Nails", augments={'Mag. Acc.+11','"Mag.Atk.Bns."+11','"Conserve MP"+5',}},
neck="Sibyl Scarf",
waist="Sacro Cord",
left_ear="Friomisi Earring",
right_ear="Crematio Earring",
left_ring="Mephitas's Ring",
right_ring={ name="Metamor. Ring +1", augments={'Path: A',}},
back="Izdubar Mantle",}
sets.midcast['Blue Magic'].Magical.Resistant = set_combine(sets.midcast['Blue Magic'].Magical, {})
sets.midcast['Blue Magic'].MagicalDark = set_combine(sets.midcast['Blue Magic'].Magical, {})
sets.midcast['Blue Magic'].MagicalLight = set_combine(sets.midcast['Blue Magic'].Magical, {})
-- Magical spells with a primary Mnd mod
sets.midcast['Blue Magic'].MagicalMnd = set_combine(sets.midcast['Blue Magic'].Magical, {})
-- Magical spells with a Dex stat mod (on top of Int)
sets.midcast['Blue Magic'].MagicalDex = set_combine(sets.midcast['Blue Magic'].Magical, {})
-- Magical spells with a Vit stat mod (on top of Int)
sets.midcast['Blue Magic'].MagicalVit = set_combine(sets.midcast['Blue Magic'].Magical, {})
-- Magical spells with a primary Chr mod
sets.midcast['Blue Magic'].MagicalChr = set_combine(sets.midcast['Blue Magic'].Magical, {})
-- Magical spells (generally debuffs) that we want to focus on magic accuracy over damage.
-- Add Int for damage where available, though.
sets.midcast['Blue Magic'].MagicAccuracy = {}
-- Breath-based spells - HP --
sets.midcast['Blue Magic'].Breath = set_combine(sets.midcast['Blue Magic'].Magical, {head="Luh. Keffiyeh +3"})
-- Stun spells
sets.midcast['Blue Magic'].StunPhysical = set_combine(sets.midcast['Blue Magic'].MagicAccuracy, {})
sets.midcast['Blue Magic'].StunMagical = sets.midcast['Blue Magic'].MagicAccuracy
-- Healing spells
sets.midcast['Blue Magic'].Healing = {}
sets.midcast['Blue Magic'].HealingSelf = set_combine(sets.midcast['Blue Magic'].Healing, {
legs="Gyve Trousers", -- 10
neck="Phalaina Locket", -- 4(4)
ring2="Asklepian Ring", -- (3)
back="Solemnity Cape", --7
waist="Gishdubar Sash", -- (10)
})
-- White Wind
sets.midcast['Blue Magic']['White Wind'] = set_combine(sets.midcast['Blue Magic'].Healing, {})
-- Buffs that depend on blue magic skill
sets.midcast['Blue Magic'].SkillBasedBuff = sets.midcast['Blue Magic']
sets.midcast['Blue Magic']['Occultation'] = set_combine(sets.midcast['Blue Magic'], {}) -- 1 shadow per 50 skill
-- Other general buffs
sets.midcast['Blue Magic'].Buff = sets.midcast['Blue Magic']
sets.midcast['Blue Magic'].Refresh = set_combine(sets.midcast['Blue Magic'], {})
sets.midcast['Blue Magic']['Carcharian Verve'] = set_combine(sets.midcast['Blue Magic'].Buff, {})
sets.midcast['Enhancing Magic'] = {}
sets.midcast.EnhancingDuration = {
ammo="Staunch Tathlum",
head={ name="Telchine Cap", augments={'Pet: DEF+18','"Elemental Siphon"+35','Enh. Mag. eff. dur. +9',}},
body={ name="Telchine Chas.", augments={'Enh. Mag. eff. dur. +10',}},
hands={ name="Telchine Gloves", augments={'Enh. Mag. eff. dur. +10',}},
legs={ name="Telchine Braconi", augments={'Spell interruption rate down -9%','Enh. Mag. eff. dur. +10',}},
feet={ name="Telchine Pigaches", augments={'Enh. Mag. eff. dur. +9',}},
neck={ name="Loricate Torque +1", augments={'Path: A',}},
waist="Flume Belt",
left_ear="Eabani Earring",
right_ear="Ethereal Earring",
left_ring="Defending Ring",
right_ring="Meridian Ring",
back="Repulse Mantle",}
sets.midcast.Refresh = set_combine(sets.midcast.EnhancingDuration, {})
sets.midcast.Stoneskin = set_combine(sets.midcast.EnhancingDuration, {waist="Siegel Sash"})
sets.midcast.Phalanx = set_combine(sets.midcast.EnhancingDuration, {})
sets.midcast.Aquaveil = set_combine(sets.midcast.EnhancingDuration, {})
sets.midcast.Protect = set_combine(sets.midcast.EnhancingDuration, {ring1="Sheltered Ring"})
sets.midcast.Protectra = sets.midcast.Protect
sets.midcast.Shell = sets.midcast.Protect
sets.midcast.Shellra = sets.midcast.Protect
sets.midcast['Enfeebling Magic'] = set_combine(sets.midcast['Blue Magic'].MagicAccuracy, {})
sets.midcast.Utsusemi = sets.midcast.SIRD
----------------------------------------------------------
------------------------- Idle Sets ----------------------
----------------------------------------------------------
-- state.IdleMode:options('Normal', 'DT', 'Evasion')
-- state.OffenseMode:options('Normal', 'HasteII', 'HighHP')
-- state.HybridMode:options('Normal', 'Armored', 'Evasion')
-- state.WeaponskillMode:options('Normal', 'WSHP')
-- Defense Modes.
-- state.PhysicalDefenseMode:options('PDT')
-- state.MagicalDefenseMode:options('MDT')
-- state.ExtraDefenseMode = M{['description']='Extra Defense Mode', 'None', 'MaxHP'}
-- Idle Normal
sets.idle = {
ammo="Brigantia Pebble",
head="Nyame Helm",
body="Hashishin Mintan +3",
hands="Nyame Gauntlets",
legs="Nyame Flanchard",
feet="Nyame Sollerets",
neck="Sibyl Scarf",
waist="Flume Belt",
left_ear="Eabani Earring",
right_ear="Ethereal Earring",
left_ring="Defending Ring",
right_ring="Shneddick Ring +1",
back="Repulse Mantle",}
-- Idle DT
sets.idle.DT = {
ammo="Brigantia Pebble",
head="Nyame Helm",
body="Shamash Robe",
hands="Nyame Gauntlets",
legs="Nyame Flanchard",
feet="Nyame Sollerets",
neck="Sibyl Scarf",
waist="Flume Belt",
left_ear="Eabani Earring",
right_ear="Ethereal Earring",
left_ring="Defending Ring",
right_ring="Shadow Ring",
back="Repulse Mantle",}
-- Idle Evasion
sets.idle.Evasion = {
ammo="Brigantia Pebble",
head="Malignance Chapeau",
body="Malignance Tabard",
hands="Malignance Gloves",
legs="Malignance Tights",
feet="Malignance Boots",
--neck={ name="Loricate Torque +1", augments={'Path: A',}},
neck={ name="Unmoving Collar +1", augments={'Path: A',}},
waist="Svelt. Gouriz +1",
left_ear="Eabani Earring",
right_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
left_ring="Defending Ring",
right_ring="Fortified Ring",
back={ name="Toutatis's Cape", augments={'AGI+20','Eva.+20 /Mag. Eva.+20','AGI+10','Enmity+10','DEF+50',}},}
----------------------------------------------------------------------
------------------------- Defense Sets -------------------------------
----------------------------------------------------------------------
-- state.IdleMode:options('Normal', 'DT', 'Evasion')
-- state.OffenseMode:options('Normal', 'HasteII', 'HighHP')
-- state.HybridMode:options('Normal', 'Armored', 'Evasion')
-- state.WeaponskillMode:options('Normal', 'WSHP')
-- Defense Modes.
-- state.PhysicalDefenseMode:options('PDT')
-- state.MagicalDefenseMode:options('MDT')
-- state.ExtraDefenseMode = M{['description']='Extra Defense Mode', 'None', 'MaxHP'}
sets.defense.PDT = set_combine(sets.engaged, {neck="Incanter's Torque", body="Assim. Jubbah +2", hands="Assim. Bazu. +2", feet="Luhlaza Charuqs +1"})
sets.defense.MDT = sets.idle
-- Apply over Defense Sets
sets.MaxHP = {
ammo="Brigantia Pebble",
head="Malignance Chapeau",
body="Malignance Tabard",
hands="Malignance Gloves",
legs="Malignance Tights",
feet="Malignance Boots",
neck={ name="Unmoving Collar +1", augments={'Path: A',}},
waist="Reiki Yotai",
left_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
right_ear="Tuisto Earring",
left_ring="Defending Ring",
right_ring={ name="Gelatinous Ring +1", augments={'Path: A',}},
back="Moonbeam Cape",}
-- Apply over Defense Sets
sets.defense.MaxHP = sets.MaxHP
----------------------------------------------------------------------
----------------------------- 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
-- * Blu Dual Wield:
-- state.IdleMode:options('Normal', 'DT', 'Evasion')
-- state.OffenseMode:options('Normal', 'HasteII', 'HighHP')
-- state.HybridMode:options('Normal', 'Armored', 'Evasion')
-- state.WeaponskillMode:options('Normal', 'WSHP')
-- Defense Modes.
-- state.PhysicalDefenseMode:options('PDT')
-- state.MagicalDefenseMode:options('MDT')
-- state.ExtraDefenseMode = M{['description']='Extra Defense Mode', 'None', 'MaxHP'}
-- Normal Engaged -- 45% Magic Haste (11% DW to cap)
sets.engaged = {
ammo="Ginsen",
head="Malignance Chapeau",
body="Malignance Tabard",
hands="Malignance Gloves",
--hands="Assim. Bazu. +2",
legs="Malignance Tights",
feet="Malignance Boots",
neck="Lissome Necklace",
waist="Reiki Yotai",
left_ear="Eabani Earring",
right_ear={ name="Hashi. Earring +1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+13','Mag. Acc.+13','"Dbl.Atk."+4',}},
left_ring="Lehko's Ring",
right_ring="Chirich Ring +1",
back="Grounded Mantle",}
-- Total 7
-- Haste II Engaged -- 30% Magic Haste (26% DW to cap)
sets.engaged.HasteII = set_combine(sets.engaged, {
body={ name="Adhemar Jacket", augments={'DEX+10','AGI+10','Accuracy+15',}}, --5
feet={ name="Taeon Boots", augments={'Accuracy+20 Attack+20','"Dual Wield"+5','Crit. hit damage +3%',}}, --9
right_ear="Suppanomimi"})--5
-- Reiki Yotai -- 7
-- Total 30
-- Evasion Engaged
sets.engaged.HighHP = {
ammo="Brigantia Pebble",
head="Malignance Chapeau",
body="Malignance Tabard",
hands="Malignance Gloves",
legs="Malignance Tights",
feet="Malignance Boots",
--neck={ name="Loricate Torque +1", augments={'Path: A',}},
neck={ name="Unmoving Collar +1", augments={'Path: A',}},
waist="Svelt. Gouriz +1",
left_ear="Eabani Earring",
right_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
left_ring="Defending Ring",
right_ring="Fortified Ring",
back={ name="Toutatis's Cape", augments={'AGI+20','Eva.+20 /Mag. Eva.+20','AGI+10','Enmity+10','DEF+50',}},}
----------------------------------------------------------------------
------------------------------ Hybrid Sets ---------------------------
----------------------------------------------------------------------
-- state.IdleMode:options('Normal', 'DT', 'Evasion')
-- state.OffenseMode:options('Normal', 'HasteII', 'HighHP')
-- state.HybridMode:options('Normal', 'Armored', 'Evasion')
-- state.WeaponskillMode:options('Normal', 'WSHP')
-- Defense Modes.
-- state.PhysicalDefenseMode:options('PDT')
-- state.MagicalDefenseMode:options('MDT')
-- state.ExtraDefenseMode = M{['description']='Extra Defense Mode', 'None', 'MaxHP'}
-- Hybrid Armored
sets.engaged.Armored = {
ammo="Staunch Tathlum",
head="Malignance Chapeau",
body="Malignance Tabard",
hands="Malignance Gloves",
legs="Malignance Tights",
feet="Malignance Boots",
neck={ name="Loricate Torque +1", augments={'Path: A',}},
waist="Reiki Yotai",
left_ear="Eabani Earring",
right_ear="Tuisto Earring",
left_ring="Defending Ring",
right_ring="Chirich Ring +1",
back="Repulse Mantle",}
sets.engaged.HasteII.Armored = set_combine(sets.engaged.HasteII, sets.engaged.Armored)
sets.engaged.HighHP.Armored = set_combine(sets.engaged.HighHP, sets.engaged.Armored)
-- Hybrid Evasion
sets.engaged.Evasion = {
ammo="Brigantia Pebble",
head="Malignance Chapeau",
body="Malignance Tabard",
hands="Malignance Gloves",
legs="Malignance Tights",
feet="Malignance Boots",
--neck={ name="Loricate Torque +1", augments={'Path: A',}},
neck={ name="Unmoving Collar +1", augments={'Path: A',}},
waist="Svelt. Gouriz +1",
left_ear="Eabani Earring",
right_ear={ name="Odnowa Earring +1", augments={'Path: A',}},
left_ring="Defending Ring",
right_ring="Fortified Ring",
back={ name="Toutatis's Cape", augments={'AGI+20','Eva.+20 /Mag. Eva.+20','AGI+10','Enmity+10','DEF+50',}},}
sets.engaged.HasteII.Evasion = set_combine(sets.engaged.HasteII, sets.engaged.Evasion)
sets.engaged.HighHP.Evasion = set_combine(sets.engaged.HighHP, sets.engaged.Evasion)
----------------------------------------------------------------------
--------------------------- Weapons Sets -----------------------------
----------------------------------------------------------------------
-- Weapon Sets
-- state.WeaponSet = M{['description']='Weapon Set', 'Naegling', 'Tanmogayi', 'Maxentius'}
-- state.SubSet = M{['description']='SubSet', 'Zantetsuken', 'sTanmogayi'}
-- state.RangedSet = M{['description']='Ranged Set', 'None', 'Trollbane'}
sets.Naegling = {main="Naegling"}
sets.Tanmogayi = {main={ name="Tanmogayi +1", augments={'Path: A',}}}
sets.Rounsey = {main="Rounsey Wand"}
-- state.SubSet = M{['description']='SubSet', 'Zantetsuken', 'sTanmogayi', 'Genbu'}
sets.Zantetsuken = {sub="Zantetsuken"}
sets.sTanmogayi = {sub={ name="Tanmogayi +1", augments={'Path: A',}}}
sets.Genbu = {sub="Genbu's Shield"}
-- state.RangedSet = M{['description']='Ranged Set', 'None', 'Trollbane'}
sets.Trollbane = {range="Trollbane", ammo="None"}
----------------------------------------------------------------------
-------------------------- Extra Sets --------------------------------
----------------------------------------------------------------------
-- Magic Burst
sets.magic_burst = set_combine(sets.midcast['Blue Magic'].Magical, {})
-- Doom
sets.buff.Doom = {
--neck="Nicander's Necklace", --20
ring1="Blenmot's Ring +1",
ring2="Blenmot's Ring",--10
--ring2={name="Eshmun's Ring", bag="wardrobe4"}, --20
waist="Gishdubar Sash",} --10
-- Town --
sets.idle.Town = set_combine(sets.idle, {})
-- Adoulin
sets.Adoulin = set_combine(sets.idle.Town, {
body="Councilor's Garb"})
-- Kiting
sets.Kiting = {left_ring="Shneddick Ring +1",}
-- Knockback
sets.Knockback = {back="Repulse Mantle"}
-- Moonshade
sets.Moonshade = {right_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +250',}},}
-- Obi
sets.Obi = {waist="Hachirin-no-Obi"}
-- Default Shield
sets.DefaultShield = {}
-- WarpRings
sets.WarpRings = {
left_ring="Dim. Ring (Mea)",
right_ring="Warp Ring",}
end
----------------------------------------------------------
--------------------- Functions --------------------------
----------------------------------------------------------
function job_pretarget(spell, action, spellMap, eventArgs)
-- Prevent Out of Range WeaponSkill --
if spell.type == "WeaponSkill" and player.status == 'Engaged' and spell.target.distance > target_distance then
eventArgs.cancel=true
add_to_chat(123, spell.name..' Canceled: [Out of Range]')
return
end
-- Spectral Jig Cancel --
if spell.name == 'Spectral Jig' and buffactive.sneak then
-- If sneak is active when using, cancel before completion
send_command('cancel 71')
end
-- Auto Echo Drop --
if AutoEcho and spell.action_type == 'Magic' and buffactive['Silence'] then
cancel_spell()
send_command('input /item "Echo Drops" <me>')
end
end
-----------------------------------------------------------
function job_precast(spell, action, spellMap, eventArgs)
-- Valiance/Vallation/Liement Cancel
if spell.name == 'Valiance' or spell.name == 'Vallation' or spell.name == 'Liement' then
if buffactive['Valiance'] then
cast_delay(0.2)
windower.ffxi.cancel_buff(535)
elseif buffactive['Vallation'] then
cast_delay(0.2)
windower.ffxi.cancel_buff(531)
elseif buffactive['Liement'] then
cast_delay(0.2)
windower.ffxi.cancel_buff(537)
end
end
-- Rune Enchantments
if rune_enchantments:contains(spell.english) then
eventArgs.handled = true
end
-- Utsusemi Cancel --
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
-- Activate Unbridled Learning --
if unbridled_spells:contains(spell.english) and not state.Buff['Unbridled Learning'] then
eventArgs.cancel = true
windower.send_command('@input /ja "Unbridled Learning" <me>; wait 1.5; input /ma "'..spell.name..'" '..spell.target.name)
end
end
-----------------------------------------------------------
function job_post_precast(spell, action, spellMap, eventArgs)
-- Change to Moonshade Earring if TP is less than 2750 -- (Exclude Defense Modes)
if spell.type=="WeaponSkill" then
if state.OffenseMode.value ~= 'HighHP' and state.ExtraDefenseMode.value ~= 'MaxHP' then
if moonshade_WS:contains(spell.english) and player.tp<2750 then equip({ear2="Moonshade Earring"})
end
end
end
-- Set Weaponskill WSHP to Engaged HighHP Set
if spell.type == 'WeaponSkill' and state.OffenseMode.current == 'HighHP' then
currentSpell = spell.english
eventArgs.handled = true
if spell.type == 'WeaponSkill' then
equip(sets.precast.WS.WSHP)
end
end
-- Set MaxHP Weaponskill to ExtraDefenseMode
if spell.type == 'WeaponSkill' and state.DefenseMode.current ~= 'None' and state.ExtraDefenseMode.current == 'MaxHP' then
currentSpell = spell.english
eventArgs.handled = true
if spell.type == 'WeaponSkill' then
equip(sets.precast.WS.MaxHP)
end
end
-- Aeolian Edge Tag --
if spell.english == 'Aeolian Edge' and state.TreasureMode.value ~= 'None' then equip(sets.TreasureHunter)
end
-- Elemental Weaponskill Belt Swap
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"})
--equip({waist="Hachirin-no-Obi"})
-- 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"})
--equip({waist="Hachirin-no-Obi"})
-- Match day or weather.
elseif spell.element == world.day_element or spell.element == world.weather_element then
equip({waist="Hachirin-no-Obi"})
elseif spell.element ~= world.day_element or spell.element ~= world.weather_element then
equip({waist="Sacro Cord"})
end
end
-- Auto Unbridled Learning
if unbridled_spells:contains(spell.english) and not state.Buff['Unbridled Learning'] then
eventArgs.cancel = true
windower.send_command('@input /ja "Unbridled Learning" <me>; wait 1.5; input /ma "'..spell.name..'" '..spell.target.name)
end
end
----------------------------------------------------------
function job_midcast(spell, action, spellMap, eventArgs)
-- Lock Midcast during DefenseMode
if state.DefenseMode.value ~= 'None' and spell.type ~= 'JobAbility' then
handle_equipping_gear(player.status)
eventArgs.handled = true
end
end
----------------------------------------------------------
function job_post_midcast(spell, action, spellMap, eventArgs)
-- Add enhancement gear for Chain Affinity, etc.
if spell.skill == 'Blue Magic' then
for buff,active in pairs(state.Buff) do
if active and sets.buff[buff] then
equip(sets.buff[buff])
end
end
if spellMap == 'Magical' then
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"})
end
end
if spellMap == 'Healing' and spell.target.type == 'SELF' then
equip(sets.midcast['Blue Magic'].HealingSelf)
end
end
if spell.skill == 'Enhancing Magic' and classes.NoSkillSpells:contains(spell.english) then
equip(sets.midcast.EnhancingDuration)
if spellMap == 'Refresh' then
equip(sets.midcast.Refresh)
end
end
end
----------------------------------------------------------
function job_aftercast(spell, action, spellMap, eventArgs)
if state.Buff[spell.english] ~= nil then
state.Buff[spell.english] = not spell.interrupted or buffactive[spell.english]
end
-- Lock to Weapon Selection during Idle --
if player.status ~= 'Idle' and state.WeaponLock.value == false then
check_weaponset()
end
-- Lock to Weapon Selection during Engaged --
if player.status ~= 'Engaged' and state.WeaponLock.value == false
then
check_weaponset()
end
-- Blue Magic Timers
if not spell.interrupted then
if spell.english == "Dream Flower" then
send_command('@timers c "Dream Flower ['..spell.target.name..']" 90 down spells/00098.png')
elseif spell.english == "Soporific" then
send_command('@timers c "Sleep ['..spell.target.name..']" 90 down spells/00259.png')
elseif spell.english == "Sheep Song" then
send_command('@timers c "Sheep Song ['..spell.target.name..']" 60 down spells/00098.png')
elseif spell.english == "Yawn" then
send_command('@timers c "Yawn ['..spell.target.name..']" 60 down spells/00098.png')
elseif spell.english == "Entomb" then
send_command('@timers c "Entomb ['..spell.target.name..']" 60 down spells/00547.png')
end
end
end
----------------------------------------------------------
function job_post_aftercast(spell, action, spellMap, eventArgs)
end
-----------------------------------------------------------
function job_buff_change(buff, gain, eventArgs)
-- Doom
if buff == "doom" then
if gain then
equip(sets.buff.Doom)
send_command('@input /echo Doomed.')
disable('ring1','ring2','waist')
else
enable('ring1','ring2','waist')
handle_equipping_gear(player.status)
end
end
if state.Buff[buff] ~= nil then
state.Buff[buff] = gain
handle_equipping_gear(player.status)
end
if not midaction() then
handle_equipping_gear(player.status)
end
end
----------------------------------------------------------
function job_state_change(statefield, new_value, old_value)
classes.CustomDefenseGroups:clear()
classes.CustomDefenseGroups:append(state.ExtraDefenseMode.current)
classes.CustomMeleeGroups:clear()
classes.CustomMeleeGroups:append(state.ExtraDefenseMode.current)
-- Weapon Lock --
if state.WeaponLock.value == true then
disable('main', 'sub')
else
enable('main', 'sub')
end
-- Ranged Lock --
if state.RangedLock.value == true then
disable('ranged', 'ammo')
else
enable('ranged', 'ammo')
end
check_weaponset()
end
----------------------------------------------------------
function job_handle_equipping_gear(playerStatus, eventArgs)
check_gear()
end
----------------------------------------------------------
function job_update(cmdParams, eventArgs)
handle_equipping_gear(player.status)
th_update(cmdParams, eventArgs)
update_melee_groups()
end
----------------------------------------------------------
function job_get_spell_map(spell, default_spell_map)
if spell.skill == 'Blue Magic' then
for category,spell_list in pairs(blue_magic_maps) do
if spell_list:contains(spell.english) then
return category
end
end
end
end
----------------------------------------------------------
function customize_idle_set(idleSet)
-- Weapon Sets in Idle --
-- state.WeaponSet = M{['description']='Weapon Set', 'Naegling', 'Tanmogayi', 'Maxentius'}
if state.WeaponSet.value == 'Naegling' then idleSet = set_combine(idleSet, sets.Naegling)
end
if state.WeaponSet.value == 'Tanmogayi' then idleSet = set_combine(idleSet, sets.Tanmogayi)
end
if state.WeaponSet.value == 'Rounsey' then idleSet = set_combine(idleSet, sets.Rounsey)
end
-- state.SubSet = M{['description']='SubSet', 'Zantetsuken', 'Tanmogayi'}
if state.SubSet.value == 'Zantetsuken' then idleSet = set_combine(idleSet, sets.Zantetsuken)
end
if state.SubSet.value == 'sTanmogayi' then idleSet = set_combine(idleSet, sets.sTanmogayi)
end
if state.SubSet.value == 'Genbu' then idleSet = set_combine(idleSet, sets.Genbu)
end
-- state.RangedSet = M{['description']='Ranged Set', 'None', 'Trollbane'}
if state.RangedSet.value == 'Trollbane' then idleSet = set_combine(idleSet, sets.Trollbane)
end
-- Kiting
if state.Kiting.value == true then
idleSet = set_combine(idleSet, sets.Kiting)
end
-- Knockback
if state.Knockback.value == true then
idleSet = set_combine(idleSet, sets.Knockback)
end
-- Adoulin Counsilor's Garb
local res = require('resources')
local info = windower.ffxi.get_info()
local zone = res.zones[info.zone].name
if zone:match('Adoulin') then
idleSet = set_combine(idleSet, sets.Adoulin)
end
-- Auto sync 'idle.IdleHP' with OffensiveMode 'HighHP'
if state.OffenseMode.value == 'HighHP' or state.DefenseMode.value ~= "None" or state.ExtraDefenseMode.value == 'MaxHP' then
idleSet = set_combine(idleSet, sets.idle.IdleHP)
end
-- WarpRings
if state.WarpRings.current == 'on' then
idleSet = {left_ring="Dim. Ring (Mea)",
right_ring="Warp Ring",}
state.Kiting:set(false)
end
return idleSet
end
----------------------------------------------------------
function customize_melee_set(meleeSet)
-- state.WeaponSet = M{['description']='Weapon Set', 'Naegling', 'Tanmogayi', 'Rounsey'}
if state.ExtraDefenseMode.value == 'MaxHP' then meleeSet = set_combine(meleeSet, sets.defense.MaxHP)
end
if state.WeaponSet.value == 'Naegling' then meleeSet = set_combine(meleeSet, sets.Naegling)
end
if state.WeaponSet.value == 'Tanmogayi' then meleeSet = set_combine(meleeSet, sets.Tanmogayi)
end
if state.WeaponSet.value == 'Rounsey' then meleeSet = set_combine(meleeSet, sets.Rounsey)
end
-- state.SubSet = M{['description']='SubSet', 'Zantetsuken', 'sTanmogayi', 'Genbu"}
if state.SubSet.value == 'Zantetsuken' then meleeSet = set_combine(meleeSet, sets.Zantetsuken)
end
if state.SubSet.value == 'sTanmogayi' then meleeSet = set_combine(meleeSet, sets.sTanmogayi)
end
if state.SubSet.value == 'Genbu' then meleeSet = set_combine(meleeSet, sets.Genbu)
end
-- state.RangedSet = M{['description']='Ranged Set', 'Trollbane'}
if state.RangedSet.value == 'Trollbane' then meleeSet =set_combine(meleeSet, sets.Trollbane)
end
-- Treasure Hunter --
if state.TreasureMode.value == 'Fulltime' then
meleeSet = set_combine(meleeSet, sets.TreasureHunter)
end
-- Kiting --
if state.Kiting.value == true then
meleeSet = set_combine(meleeSet, sets.Kiting)
end
-- Knockback --
if state.Knockback.value == true then
meleeSet = set_combine(meleeSet, sets.Knockback)
end
-- WarpRings
if state.WarpRings.current == 'on' then
meleeSet = sets.WarpRings
state.Kiting:set(false)
end
check_weaponset()
return meleeSet
end
----------------------------------------------------------
function customize_defense_set(defenseSet)
if state.ExtraDefenseMode.value ~= 'None' then
defenseSet = set_combine(defenseSet, sets[state.ExtraDefenseMode.value])
end
if state.Buff.Doom then
defenseSet = set_combine(defenseSet, sets.buff.Doom)
end
return defenseSet
end
----------------------------------------------------------
function display_current_job_state(eventArgs)
local r_msg = state.Runes.current
local r_color = ''
if state.Runes.current == 'Ignis' then r_color = 167
elseif state.Runes.current == 'Gelus' then r_color = 210
elseif state.Runes.current == 'Flabra' then r_color = 204
elseif state.Runes.current == 'Tellus' then r_color = 050
elseif state.Runes.current == 'Sulpor' then r_color = 215
elseif state.Runes.current == 'Unda' then r_color = 207
elseif state.Runes.current == 'Lux' then r_color = 001
elseif state.Runes.current == 'Tenebrae' then r_color = 160 end
-- Weapons Message
local z_msg = state.WeaponSet.value .. '/'
local s_msg = state.SubSet.value
-- Idle Message
local i_msg = state.IdleMode.value
-- Melee/Hybrid Message
local m_msg = state.OffenseMode.value
if state.HybridMode.value ~= 'Normal' then
m_msg = m_msg .. '/' ..state.HybridMode.value
end
-- Treasure Mode Message
local t_msg = ''
if state.TreasureMode.value ~= 'None' then
t_msg = t_msg .. ' TH:' .. state.TreasureMode.value
end
-- Knockback Message
local k_msg = ''
if state.Knockback.value then
k_msg = k_msg .. ' Knockback:On'
end
-- Kiting Message
local kit_msg = ''
if state.Kiting.value then
kit_msg = kit_msg .. ' Kiting:On'
end
-- Defense Mode/Extra Defense Mode Message
local d_msg = ''
if state.DefenseMode.value ~= 'None' then
d_msg = d_msg .. ' ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
end
-- Extra Defense Mode
if state.ExtraDefenseMode.value ~= 'None' then
d_msg = d_msg .. ' ' .. state.ExtraDefenseMode.value
end
-- Weaponskill Mode Message
local ws_msg = ''
if state.WeaponskillMode.value ~= 'Normal' then
ws_msg = ws_msg .. ' WS:'.. state.WeaponskillMode.value
end
-- Melee/Hybrid > Idle > (Knockback) > (Kiting) > (Defense) > TH > (Magic Burst) > (WS) >
add_to_chat(002, ' # '
-- Dagger/Sub
..string.char(31,122).. z_msg
..string.char(31,122).. s_msg
..string.char(31,002).. ' #'
-- Offense Mode/Melee
..string.char(31,122).. ' Melee:'
..string.char(31,122).. m_msg
..string.char(31,002).. ' #'
-- TH Mode
..string.char(31,122).. t_msg
..string.char(31,002).. ' #'
-- Idle
..string.char(31,122).. ' Idle:'
..string.char(31,122)..i_msg
..string.char(31,002).. ' #'
-- Knockback
..string.char(31,004)..k_msg
..string.char(31,002).. ' #'
-- Kiting
..string.char(31,004)..kit_msg
..string.char(31,002).. ' #'
-- Defense Mode
..string.char(31,004)..d_msg
..string.char(31,002).. ' #'
-- WS Mode only shows when has value.
..string.char(31,207)..ws_msg
..string.char(31,002).. ' #'
)
eventArgs.handled = true
end
----------------------------------------------------------
function job_get_spell_map(spell, default_spell_map)
if spell.skill == 'Blue Magic' then
for category,spell_list in pairs(blue_magic_maps) do
if spell_list:contains(spell.english) then
return category
end
end
end
end
----------------------------------------------------------
function check_buff(buff_name, eventArgs)
if state.Buff[buff_name] then
equip(sets.buff[buff_name] or {})
if state.TreasureMode.value == 'Fulltime' then
equip(sets.TreasureHunter)
end
eventArgs.handled = true
end
end
----------------------------------------------------------
function job_self_command(cmdParams, eventArgs)
if cmdParams[1]:lower() == 'rune' then
send_command('@input /ja '..state.Runes.value..' <me>')
end
end
----------------------------------------------------------
function determine_idle_group()
classes.CustomIdleGroups:clear()
if areas.Adoulin:contains(world.area) then
classes.CustomIdleGroups:append('Adoulin')
end
end
----------------------------------------------------------
function update_active_abilities()
state.Buff['Burst Affinity'] = buffactive['Burst Affinity'] or false
state.Buff['Efflux'] = buffactive['Efflux'] or false
state.Buff['Diffusion'] = buffactive['Diffusion'] or false
end
----------------------------------------------------------
-- State buff checks that will equip buff gear and mark the event as handled.
function apply_ability_bonuses(spell, action, spellMap)
if state.Buff['Burst Affinity'] and (spellMap == 'Magical' or spellMap == 'MagicalLight' or spellMap == 'MagicalDark' or spellMap == 'Breath') then
if state.MagicBurst.value then
equip(sets.magic_burst)
end
equip(sets.buff['Burst Affinity'])
end
if state.Buff.Efflux and spellMap == 'Physical' then
equip(sets.buff['Efflux'])
end
if state.Buff.Diffusion and (spellMap == 'Buffs' or spellMap == 'BlueSkill') then
equip(sets.buff['Diffusion'])
end
if state.Buff['Burst Affinity'] then equip (sets.buff['Burst Affinity']) end
if state.Buff['Efflux'] then equip (sets.buff['Efflux']) end
if state.Buff['Diffusion'] then equip (sets.buff['Diffusion']) end
end
----------------------------------------------------------
function update_melee_groups()
classes.CustomMeleeGroups:clear()
end
----------------------------------------------------------
function check_gear()
end
----------------------------------------------------------
function check_weaponset()
equip(sets[state.WeaponSet.current])
end
----------------------------------------------------------
windower.register_event('zone change',
function()
end)
Carbuncle.Nynja
Serveur: Carbuncle
Game: FFXI
Posts: 4089
By Carbuncle.Nynja 2024-04-05 23:08:29
People with ***like this wonder why the games so *** laggy.
The game is "so *** laggy" because the servers are across the world and the network stack is 20+ years old.
It is so simple to check, jut play vanilla. Does it still lag? Yup. TIL players on vanilla client are on their own server
By Dodik 2024-04-06 07:48:10
Makes no difference to lag whether you have ***like this in GS, GS loaded or not or even windower loaded or not.
But you keep banging that drum.
By drakefs 2024-04-06 15:48:53
TIL players on vanilla client are on their own server
You believe what you want, it doesn't make it fact.
If players in Japan had the same lag as those in NA, your belief may have had some truth to it. But they don't, so it is very likely your belief is wrong.
By Lili 2024-04-06 17:42:32
Basic GS stuff doesn't make any difference regarding lag, but Selindrile's suite is infamous for doing way too much stuff twice per second and making the client stutter, depending on how beefy your PC if.
Lag and stutter are not the same thing, but too much crap in your gs file will affect performance.
[+]
By drakefs 2024-04-06 20:09:57
Basic GS stuff doesn't make any difference regarding lag, but Selindrile's suite is infamous for doing way too much stuff twice per second and making the client stutter, depending on how beefy your PC if.
Lag and stutter are not the same thing, but too much crap in your gs file will affect performance.
I understand that but lets be clear here:
People with ***like this wonder why the games so *** laggy.
The game is "so *** laggy" because the servers are across the world and the network stack is 20+ years old.
It is so simple to check, jut play vanilla. Does it still lag? Yup. TIL players on vanilla client are on their own server
implies that GS is causing the server to lag and therefore lag for other players.
GS does not cause 2500ms+ of latency or dropped packets (not even Selindrile's stuff). Nor does it cause lag for other players not even using GS.
By Hopalong 2024-04-06 20:48:26
I think its the way the program (gearswap) interfaces with the program (ffxi) while constantly having to update information through the internet. Lots of queries going on.
Everyone knows the more you automate, the more it breaks.
[+]
By Dodik 2024-04-07 07:05:12
Selindrile's stuff is not even the worst offender when it comes to stutter and client side performance, though yes, best to turn off most of the automation.
Some UI mods like xivparty will make the client very slow.
Neither of these things is related to game lag as in client<->server performance.
Shiva.Thorny
Serveur: Shiva
Game: FFXI
Posts: 2850
By Shiva.Thorny 2024-04-07 07:18:26
Neither of these things is related to game lag as in client<->server performance.
They are, in a way. The server has to send a response for each piece of equipment you change, and the primary cause of poor server<>client performance in instances is because the server has a maximum packet size and an associated queue that gets too full. When you hit your macro with gearswap loaded, you might be sending 12-15 precast swaps, 12-15 midcast swaps, and an action packet. This means the server has to fit up to 30 equipment responses in, as well as queue appearance changes for everyone around you if you aren't using lockstyle. If you double tap the macro, because windower injects packets and doesn't rate limit, you could double that and require 60 equipment responses. That's almost half of your packet allotment just going to equipment changes. If your ability doesn't appear to be going off and you start mashing it, you compound those issues even more.
I'm not advocating against using gearswap or equipment swaps, but a group with minimal equipment changes is going to have much better instance performance than one where everyone is using gearswap+react.
Client side stutter is almost all caused by bad code. The amount of things displayed by xivparty, or the amount of calculation needed to do what Selindrile's does are not enough to cause lag on their own. You need poor optimization and bad design mixed in.
[+]
Serveur: Asura
Game: FFXI
Posts: 465
By Asura.Dexprozius 2024-04-12 06:35:52
Does anyone have a patch to Singer to get it to recognize Aria of Passion?
Serveur: Asura
Game: FFXI
Posts: 491
By Asura.Clintbeastwood 2024-04-12 14:42:25
That's almost half of your packet allotment just going to equipment changes.
Honest curious question: Have you done packet captures to measure this? Do you know what the MTU is set to? Assuming it's default, does 60 equipment responses really eat ~750 bytes? Even if it exceeded whatever the MTU is set to, wouldn't it just fragment and result in another packet (which still shits up the network but)?
Bismarck.Drakelth
Serveur: Bismarck
Game: FFXI
Posts: 736
By Bismarck.Drakelth 2024-04-12 14:46:50
Asura.Clintbeastwood said: »That's almost half of your packet allotment just going to equipment changes.
Honest curious question: Have you done packet captures to measure this? Do you know what the MTU is set to? Assuming it's default, does 60 equipment responses really eat ~750 bytes? Even if it exceeded whatever the MTU is set to, wouldn't it just fragment and result in another packet (which still shits up the network but)?
I'm curious too, I know a couple people who argue changing gear sets is bad on this basis
By Pulptenks 2024-04-12 14:47:30
ChatGPT helped me to solve my saber dancer cancel when i gotta rush waltz out. Why nobody could do that here?
Serveur: Asura
Game: FFXI
Posts: 491
By Asura.Clintbeastwood 2024-04-12 14:54:06
ChatGPT helped me to solve my saber dancer cancel when i gotta rush waltz out. Why nobody could do that here?
Arislan's default DNC lua already does this. It also lets you reapply Haste Samba and auto-cancels Fan Dance.
Bismarck.Drakelth
Serveur: Bismarck
Game: FFXI
Posts: 736
By Bismarck.Drakelth 2024-04-12 14:59:09
Asura.Clintbeastwood said: »ChatGPT helped me to solve my saber dancer cancel when i gotta rush waltz out. Why nobody could do that here?
Arislan's default DNC lua already does this. It also lets you reapply Haste Samba and auto-cancels Fan Dance.
Mine must be outa date cause it only has that function for shadows lol. Seems the version on his git hub also lacks this function.
Serveur: Asura
Game: FFXI
Posts: 491
By Asura.Clintbeastwood 2024-04-12 15:02:23
Bismarck.Drakelth said: »Asura.Clintbeastwood said: »ChatGPT helped me to solve my saber dancer cancel when i gotta rush waltz out. Why nobody could do that here?
Arislan's default DNC lua already does this. It also lets you reapply Haste Samba and auto-cancels Fan Dance.
Mine must be outa date cause it only has that function for shadows lol
I think the Cancel plugin is doing that for you. I don't believe my DNC lua is modified, but it also auto-Presto's before steps if it's up, and uses the most appropriate curing waltz based on the missing HP from the target being cured. I prefer more manual control over most of my other luas, but his DNC one feels really good for how I play DNC (lazily).
You have to macro-cast for it to work btw, can't do it from menu or you'll get blocked from performing the action due to whichever stance you're in.
Just looking for someone to explain this addon a bit for me. It looks like it is an alternative to Spellcast.
Is it going to be replacing Spellcast? In which ways is it better or worse. I don't know any programming but I've slowly learned more and more about spellcast and the 'language' used in gearswap is confusing to me.
It says it uses packets so it potentially could be more detectable? but does that also eliminate any lag that spellcast may encounter?
I plan on redoing my PUP xml to include pet casting sets thanks to the new addon petschool. I'm just not sure if it's worth it to just wait until gearswap gets more popular or to go ahead and do it in spellcast.
If anyone could give me more info I'd greatly appreciate it.
|
|