|
Gearswap Support Thread
Carbuncle.Kigensuro
サーバ: Carbuncle
Game: FFXI
Posts: 93
By Carbuncle.Kigensuro 2019-01-15 12:14:55
there is no 100% bulletproof way not in gearswap, not with a bot,not with ffxi's source-code, not with anything
this is the nature of computers as the data can only be calculated to a set time base
however computers are 10's of trillions of times faster then humans at doing the same calculations
as long as thay have the same data input into them computers are always faster then humans
but humans have ways to speed them selves up like previous experiences and for computers the is ML(Machine Learning)
Asura.Byrne
By Asura.Byrne 2019-01-15 16:27:47
GearSwap could do it though, You'd just make it based off of distance rather than if the target is moving. Often the use of logic is going to save you more time coding these features than thinking of some extravagant looking code. Just limit your WS to 1 yalm less than the WS's maximum range, otherwise cancel_spell().
Asura.Byrne
By Asura.Byrne 2019-01-15 22:47:32
Does it not work at all, or does it just fail sometimes? If it works sometimes you could probably just do
if spell.target.distance > ((ability_distance * range_mult[ability_distance] + spell.target.model_size)-1)
to adjust for lag
Carbuncle.Kigensuro
サーバ: Carbuncle
Game: FFXI
Posts: 93
By Carbuncle.Kigensuro 2019-01-16 00:21:57
@Zigzagzig
this is a different story you said if it moves not if its to far
i have this function in my gearswap that was built by me (it is not perfect)
--use this in pretarget Code function spell_range_check(spell) --if target distance is greater then spells max distance return true
local range_mult = {[0]=1,
[2]=1.70,
[3]=1.490909,
[4]=1.44,
[5]=1.377778,
[6]=1.30,
[7]=1.20,
[8]=1.30,
[9]=1.377778,
[10]=1.45,
[11]=1.490909,
[12]=1.70,}
if (spell.target.model_size + spell.range * range_mult[spell.range]) < spell.target.distance then
print("Target out of "..spell.name.."'s max range of "..spell_max_distance)
return true
end
end
By lazywolf 2019-01-16 15:27:00
New to gearswap and got a couple questions... Motes stuff...
I understand cycle goes through all sets but what does toggle do? change between two sets or just turn a single set on? Does Set force that set of gear to be on? And reset does?
Also lets say I cycle to state.OffenseMode {DD} with F9... if I hit F10 and start cycle to state.HybridMode {PDT} is that now the set it will default to while engaged? I would then need to F9 to get back to OffenseMode?
I don't care for the state mode names... where would I change those? the modes in the code would be fine if I could just change the message displayed in the in game chat.
Anyone have very basic gearswap without a bunch of support files and unfinished code? Thinking it may be easier than going through so many lines that leaving me wondering why anyone would ever need some of these functions... Just trying to set this up for 1 job has been a chore.
サーバ: Shiva
Game: FFXI
Posts: 1052
By Shiva.Arislan 2019-01-16 17:56:30
All explained in mote's documentation:
- https://github.com/Kinematics/GearSwap-Jobs/wiki/Commands
- https://github.com/Kinematics/GearSwap-Jobs/wiki/Sets
The state names listed in the docs are hard coded. It's not a good idea to change them.
Asura.Diggs
サーバ: Asura
Game: FFXI
Posts: 98
By Asura.Diggs 2019-01-18 19:46:46
Hi. I'm pretty sure I just failed to google and search the interwebs for this issue, could not find a solution - so I'll need to ask here.
I know this is a dangerous one, but I want to set up a automatically convert on 5% MP rule. Anyone able to help out?
A big bonus if someone could add a toggle on/off rule.
Thanks in advance!
Asura.Diggs
サーバ: Asura
Game: FFXI
Posts: 98
By Asura.Diggs 2019-01-21 08:54:24
Should be something like this I guess? However it seem to fire off on load even with full MPpool. Something I do wrong?
Code if player.mpp <= 10 then
send_command('wait .5;input /ja Convert <me>')
end
Asura.Byrne
By Asura.Byrne 2019-01-21 18:17:03
Code windower.register_event('mpp change',function()
if player.mpp <= 10 then
send_command('wait .5;input /ja Convert <me>')
end
end)
[+]
Asura.Byrne
By Asura.Byrne 2019-01-21 18:17:43
It has to know when to trigger, so this function will run a check any time your MP percentage changes.
There is a possibility your wait may need to be 1 second due to GCD.
[+]
Leviathan.Andret
サーバ: Leviathan
Game: FFXI
Posts: 1008
By Leviathan.Andret 2019-01-21 23:55:16
Hi, I have a problem of spells not switching from precast to midcast. Either the spell would use precast set or midcast set but never precast then midcast.
Checked with equipviewer and the gear doesn't seem to switch.
Code function get_sets()
send_command('bind f9 gs c toggle TP set')
send_command('bind f10 gs c toggle Idle set')
send_command('bind f11 gs c toggle Res set')
send_command('bind f12 gs c toggle Dim set')
send_command('bind ^f11 gs c toggle Req set')
function file_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')
end
--Idle Sets--
sets.Idle = {}
sets.Idle.index = {'Standard', 'DT'}
Idle_ind = 1
sets.Idle.DT = {
ammo="Staunch Tathlum +1",
head="Aya. Zucchetto +2",
body="Ayanmo Corazza +2",
hands={ name="Adhemar Wrist. +1", augments={'STR+12','DEX+12','Attack+20',}},
legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
feet="Aya. Gambieras +2",
neck="Anu Torque",
waist="Ioskeha Belt +1",
left_ear="Telos Earring",
right_ear="Sherida Earring",
left_ring="Moonlight Ring",
right_ring="Moonlight Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
sets.Idle.Standard = {
ammo="Staunch Tathlum +1",
head="Aya. Zucchetto +2",
body="Ayanmo Corazza +2",
hands={ name="Adhemar Wrist. +1", augments={'STR+12','DEX+12','Attack+20',}},
legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
feet="Aya. Gambieras +2",
neck="Anu Torque",
waist="Ioskeha Belt +1",
left_ear="Telos Earring",
right_ear="Sherida Earring",
left_ring="Moonlight Ring",
right_ring="Moonlight Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
--TP Sets--
sets.TP = {}
sets.TP.index = {'Standard', 'HBDT', 'DT'}
--1=Standard, 2=AccuracyLite, 3=AccuracyFull, 4=DT, 5=DTAccuracy--
TP_ind = 1
sets.TP.Standard = {
ammo="Ginsen",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Adhemar Jacket +1", augments={'STR+12','DEX+12','Attack+20',}},
hands={ name="Adhemar Wrist. +1", augments={'STR+12','DEX+12','Attack+20',}},
legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
feet={ name="Herculean Boots", augments={'"Triple Atk."+3','DEX+11','Accuracy+13','Attack+9',}},
neck="Anu Torque",
waist="Ioskeha Belt +1",
left_ear="Telos Earring",
right_ear="Sherida Earring",
left_ring="Epona's Ring",
right_ring="Ilabrat Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
sets.TP.HBDT = {
ammo="Staunch Tathlum +1",
head="Aya. Zucchetto +2",
body="Ayanmo Corazza +2",
hands="Turms Mittens +1",
legs="Eri. Leg Guards +1",
feet="Turms Leggings +1",
neck="Anu Torque",
waist="Ioskeha Belt +1",
left_ear="Telos Earring",
right_ear="Sherida Earring",
left_ring="Vocane Ring",
right_ring="Defending Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
sets.TP.DT = {
ammo="Staunch Tathlum +1",
head="Aya. Zucchetto +2",
body={ name="Futhark Coat +1", augments={'Enhances "Elemental Sforzo" effect',}},
hands="Turms Mittens +1",
legs="Eri. Leg Guards +1",
feet="Turms Leggings +1",
neck="Twilight Torque",
waist="Ioskeha Belt +1",
left_ear="Telos Earring",
right_ear="Sherida Earring",
left_ring="Vocane Ring",
right_ring="Defending Ring",
back="Moonbeam Cape",
}
--Weaponskill Sets--
sets.WS = {}
sets.Resolution = {}
sets.Resolution.index = {'Attack','Accuracy'}
Resolution_ind = 1
sets.Resolution.Attack = {
ammo="Knobkierrie",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Adhemar Jacket +1", augments={'STR+12','DEX+12','Attack+20',}},
hands="Meg. Gloves +2",
legs={ name="Herculean Trousers", augments={'Accuracy+24','Weapon skill damage +4%','Attack+7',}},
feet={ name="Herculean Boots", augments={'"Triple Atk."+3','DEX+11','Accuracy+13','Attack+9',}},
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear={ name="Moonshade Earring", augments={'Rng.Atk.+4','TP Bonus +250',}},
right_ear="Sherida Earring",
left_ring="Regal Ring",
right_ring="Niqmaddu Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
}
sets.Resolution.Accuracy = {
ammo="Knobkierrie",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Adhemar Jacket +1", augments={'STR+12','DEX+12','Attack+20',}},
hands="Meg. Gloves +2",
legs={ name="Herculean Trousers", augments={'Accuracy+24','Weapon skill damage +4%','Attack+7',}},
feet={ name="Herculean Boots", augments={'"Triple Atk."+3','DEX+11','Accuracy+13','Attack+9',}},
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear={ name="Moonshade Earring", augments={'Rng.Atk.+4','TP Bonus +250',}},
right_ear="Sherida Earring",
left_ring="Regal Ring",
right_ring="Niqmaddu Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
}
sets.Dimidiation = {}
sets.Dimidiation.index = {'Attack','Accuracy'}
Dimidiation_ind = 1
sets.Dimidiation.Attack = {
ammo="Knobkierrie",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Adhemar Jacket +1", augments={'STR+12','DEX+12','Attack+20',}},
hands="Meg. Gloves +2",
legs={ name="Herculean Trousers", augments={'Accuracy+24','Weapon skill damage +4%','Attack+7',}},
feet={ name="Herculean Boots", augments={'"Triple Atk."+3','DEX+11','Accuracy+13','Attack+9',}},
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear={ name="Moonshade Earring", augments={'Rng.Atk.+4','TP Bonus +250',}},
right_ear="Sherida Earring",
left_ring="Niqmaddu Ring",
right_ring="Ilabrat Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
}
sets.Dimidiation.Accuracy = {
ammo="Knobkierrie",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Adhemar Jacket +1", augments={'STR+12','DEX+12','Attack+20',}},
hands="Meg. Gloves +2",
legs={ name="Herculean Trousers", augments={'Accuracy+24','Weapon skill damage +4%','Attack+7',}},
feet={ name="Herculean Boots", augments={'"Triple Atk."+3','DEX+11','Accuracy+13','Attack+9',}},
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear={ name="Moonshade Earring", augments={'Rng.Atk.+4','TP Bonus +250',}},
right_ear="Sherida Earring",
left_ring="Niqmaddu Ring",
right_ring="Ilabrat Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
}
sets.Requiescat = {}
sets.Requiescat.index = {'Attack','Accuracy'}
Requiescat_ind = 1
sets.Requiescat.Attack = {ammo="Potestas bomblet",
head="Whirlpool mask",neck="Fotia gorget",ear1="Brutal earring",ear2="Moonshade earring",
body="Manibozho jerkin",hands="Umuthi gloves",ring1="Epona's ring",ring2="Aquasoul ring",
back="Atheling mantle",waist="Fotia belt",legs="Quiahuiz trousers",feet="Meg. Jam. +1"}
sets.Requiescat.Accuracy = {ammo="Honed tathlum",
head="Whirlpool mask",neck="Fotia gorget",ear1="Brutal earring",ear2="Moonshade earring",
body="Manibozho jerkin",hands="Umuthi gloves",ring1="Epona's ring",ring2="Aquasoul ring",
back="Letalis mantle",waist="Fotia belt",legs="Quiahuiz trousers",feet="Meg. Jam. +1"}
--Utility Sets--
sets.Enmity = {
ammo="Sapience Orb",
head="Aya. Zucchetto +2",
body={ name="Futhark Coat +1", augments={'Enhances "Elemental Sforzo" effect',}},
hands="Kurys Gloves",
legs="Eri. Leg Guards +1",
feet="Ahosi Leggings",
neck="Moonlight Necklace",
waist="Goading Belt",
left_ear="Friomisi Earring",
right_ear="Sherida Earring",
left_ring="Petrov Ring",
right_ring="Begrudging Ring",
}
sets.Utility = {}
sets.Utility.PDT = {ammo="Staunch Tathlum",
head="Fu. bandeau +1",neck="Twilight torque", ear1="Ethereal earring",
body="Futhark coat +1",hands="Buremte Gloves",ring1="Defending ring",ring2="Warden's ring",
back="Shadow mantle",waist="Flume Belt +1",legs="Erilaz Leg Guards +1",feet="Erilaz Greaves +1"}
sets.Utility.MDT = {ammo="Staunch tathlum",
head="Haruspex hat",neck="Warder's charm +1",
body="Futhark coat +1",hands="Erilaz gauntlets +1",ring1="Defending ring",ring2="Shadow ring",
back="Mollusca mantle",legs="Erilaz Leg Guards +1",feet="Erilaz Greaves +1"}
sets.Utility.Stoneskin = {
ammo = "Sapience Orb",
head = "Erilaz Galea +1",
neck = "Incanter's Torque",
ear1 = "Andoaa Earring",
ear2 = "Loquacious Earring",
body = "Futhark Coat +1",
hands = "Runeist's Mitons +1",
ring1 = "Stikini Ring +1",
ring2 = "Stikini Ring +1",
back = "Moonbeam Cape",
waist = "Flume Belt",
legs = "Futhark Trousers +1",
feet = "Erilaz Greaves +1"
}
sets.Utility.Phalanx = {
ammo = "Sapience Orb",
head = "Futhark Bandeau +1",
neck = "Incanter's Torque",
ear1 = "Andoaa Earring",
ear2 = "Loquacious Earring",
body = "Manasa Chasuble",
hands={ name="Herculean Gloves", augments={'STR+2','"Rapid Shot"+6','Phalanx +3','Accuracy+18 Attack+18','Mag. Acc.+7 "Mag.Atk.Bns."+7',}},
ring1 = "Stikini Ring +1",
ring2 = "Stikini Ring +1",
back = "Moonbeam Cape",
waist = "Flume Belt",
legs = "Carmine Cuisses +1",
feet = "Erilaz Greaves +1"
}
sets.Utility.Regen = {
ammo = "Sapience Orb",
head = "Erilaz Galea +1",
neck = "Incanter's Torque",
ear1 = "Andoaa Earring",
ear2 = "Loquacious Earring",
body = "Futhark Coat +1",
hands = "Runeist's Mitons +1",
ring1 = "Stikini Ring +1",
ring2 = "Stikini Ring +1",
back = "Moonbeam Cape",
waist = "Flume Belt",
legs = "Futhark Trousers +1",
feet = "Erilaz Greaves +1"
}
sets.Utility.Refresh = {
ammo = "Sapience Orb",
head = "Erilaz Galea +1",
neck = "Incanter's Torque",
ear1 = "Andoaa Earring",
ear2 = "Loquacious Earring",
body = "Futhark Coat +1",
hands = "Runeist's Mitons +1",
ring1 = "Stikini Ring +1",
ring2 = "Stikini Ring +1",
back = "Moonbeam Cape",
waist = "Flume Belt",
legs = "Futhark Trousers +1",
feet = "Erilaz Greaves +1"
}
sets.Utility.Utsusemi = {}
sets.Utility.Defense = {}
sets.Utility.Enmity = {
ammo="Sapience Orb",
head="Aya. Zucchetto +2",
body={ name="Futhark Coat +1", augments={'Enhances "Elemental Sforzo" effect',}},
hands="Kurys Gloves",
legs="Eri. Leg Guards +1",
feet="Ahosi Leggings",
neck="Moonlight Necklace",
waist="Goading Belt",
left_ear="Friomisi Earring",
right_ear="Sherida Earring",
left_ring="Petrov Ring",
right_ring="Begrudging Ring",
}
--Job Ability Sets--
sets.JA = {}
sets.JA.Lunge = {
ammo="Erlene's Notebook",
head={ name="Herculean Helm", augments={'Attack+14','Weapon skill damage +4%','AGI+10',}},
body={ name="Carm. Sc. Mail +1", augments={'Attack+20','"Mag.Atk.Bns."+12','"Dbl.Atk."+4',}},
hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
legs="Aya. Cosciales +2",
feet={ name="Herculean Boots", augments={'"Triple Atk."+3','DEX+11','Accuracy+13','Attack+9',}},
neck="Sanctity Necklace",
waist="Ioskeha Belt +1",
left_ear="Friomisi Earring",
right_ear="Sherida Earring",
left_ring="Ilabrat Ring",
right_ring="Regal Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
sets.JA.Sforzo = set_combine(sets.Enmity, {
body = "Futhark Coat +1"
})
sets.JA.Swordplay = set_combine(sets.Enmity, {
hands = "Futhark Mitons +1"
})
sets.JA.Vallation = set_combine(sets.Enmity, {
body = "Runeist's Coat +1",
legs = "Futhark Trousers +1",
back = "Ogma's Cape"
})
sets.JA.Pflug = set_combine(sets.Enmity, {
feet = "Runeist's Boots +1"
})
sets.JA.Valiance = set_combine(sets.Enmity, {
body = "Runeist's Coat +1",
legs = "Futhark Trousers +1",
})
sets.JA.Embolden = set_combine(sets.Enmity, {
})
sets.JA.Pulse = set_combine(sets.Enmity, {
head = "Erilaz Galea +1",
neck = "Incanter's Torque",
ring2 = "Stikini Ring",
legs = "Runeist's Trousers +1"
})
sets.JA.Gambit = set_combine(sets.Enmity, {
hands = "Runeist's Mitons +1"
})
sets.JA.Battuta = set_combine(sets.Enmity, {
head = "Futhark Bandeau +1"
})
sets.JA.Rayke = set_combine(sets.Enmity, {
feet = "Futhark Boots +1"
})
sets.JA.Liement = set_combine(sets.Enmity, {
body = "Futhark Coat +1"
})
--One For All is HP * .2 = Magic Damage Reduction--
sets.JA.One = set_combine(sets.Enmity, {
ammo = "Falcon Eye",
head = "Halitus Helm",
neck = "Sanctity Necklace",
ear1 = "Etiolation Earring",
ear2 = "Odnowa Earring +1",
body = "Runeist's Coat +1",
hands = "Runeist's Mitons +1",
ring1 = "Regal Ring",
ring2 = "Ilabrat Ring",
back = "Moonbeam Cape",
waist = "Kasiri Belt",
legs = "Erilaz Leg Guards +1",
Feet = "Carmine Greaves +1"
})
sets.JA.Subterfuge = set_combine(sets.Enmity, {})
--Precast Sets--
sets.precast = {}
sets.precast.FC = {}
sets.precast.FC.Standard = {
ammo="Sapience Orb",
head={ name="Carmine Mask +1", augments={'Accuracy+20','Mag. Acc.+12','"Fast Cast"+4',}},
body={ name="Samnuha Coat", augments={'Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+5','"Dual Wield"+5',}},
hands={ name="Leyline Gloves", augments={'Accuracy+12','Mag. Acc.+14','"Mag.Atk.Bns."+15','"Fast Cast"+2',}},
legs="Aya. Cosciales +2",
feet="Aya. Gambieras +2",
neck="Anu Torque",
waist="Ioskeha Belt +1",
left_ear="Loquac. Earring",
right_ear="Sherida Earring",
right_ring="Moonlight Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
sets.precast.FC.Enhancing = {
ammo="Sapience Orb",
head={ name="Carmine Mask +1", augments={'Accuracy+20','Mag. Acc.+12','"Fast Cast"+4',}},
body={ name="Samnuha Coat", augments={'Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+5','"Dual Wield"+5',}},
hands={ name="Leyline Gloves", augments={'Accuracy+12','Mag. Acc.+14','"Mag.Atk.Bns."+15','"Fast Cast"+2',}},
legs = "Futhark Trousers +1",
feet="Aya. Gambieras +2",
neck="Anu Torque",
waist="Ioskeha Belt +1",
left_ear="Loquac. Earring",
right_ear="Sherida Earring",
right_ring="Moonlight Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
sets.Utility.Enhancing ={
ammo = "Sapience Orb",
head = "Erilaz Galea +1",
left_ear="Loquac. Earring",
body = "Futhark Coat +1",
hands = "Runeist's Mitons +1",
ring1 = "Stikini Ring +1",
ring2 = "Stikini Ring +1",
legs = "Futhark Trousers +1",
feet = "Erilaz Greaves +1"
}
end
function precast(spell)
if spell.skill == 'Divine Magic' then
equip(sets.precast.FC.Standard)
end
if spell.skill == 'Healing Magic' then
equip(sets.precast.FC.Standard)
end
if spell.skill == 'Blue Magic' then
equip(sets.precast.FC.Standard)
end
if spell.skill == 'Enhancing Magic' then
equip(sets.precast.FC.Enhancing)
end
if spell.skill == 'Ninjutsu' then
equip(sets.precast.FC.Standard)
end
if spell.skill == 'Trust' then
equip(sets.precast.FC.Standard)
end
if spell.english == 'Lunge' or spell.english == 'Swipe' or spell.english == "Onca Suit" or spell.english == "Meteor" then
equip(sets.JA.Lunge)
end
if spell.english == 'Vallation' or spell.english == 'Valiance' then
equip(sets.JA.Vallation)
end
if spell.english == 'Battuta' then
equip(sets.JA.Battuta)
end
if spell.english == 'Pflug' then
equip(sets.JA.Pflug)
end
if spell.english == 'Gambit' then
equip(sets.JA.Gambit)
end
if spell.english == 'Embolden' then
equip(sets.JA.Embolden)
end
if spell.english == 'Vivacious Pulse' then
equip(sets.JA.Pulse)
end
if spell.english == 'Liement' then
equip(sets.JA.Liement)
end
if spell.english == 'Elemental Sforzo' then
equip(sets.JA.Sforzo)
end
if spell.english == 'Swordplay' then
equip(sets.JA.Swordplay)
end
if spell.english == 'One For All' then
ChangeGear(sets.JA.One)
end
if spell.english == 'Rayke' then
ChangeGear(sets.JA.Rayke )
end
if spell.english == 'Resolution' or spell.english == 'Shockwave' or spell.english == 'Spinning Slash' or spell.english == 'Ground Strike' then
equip(sets.Resolution[sets.Resolution.index[Resolution_ind]])
end
if spell.english == 'Dimidiation' then
equip(sets.Dimidiation[sets.Dimidiation.index[Dimidiation_ind]])
end
if spell.english == 'Requiescat' then
equip(sets.Requiescat[sets.Requiescat.index[Requiescat_ind]])
end
end
function midcast(spell,act)
if spell.skill == 'Enhancing Magic' then
equip(sets.Utility.Enhancing)
if buffactive['Embolden'] then
equip(sets.JA.Embolden)
end
end
if spell.english == 'Stoneskin' then
equip(sets.Utility.Stoneskin)
if buffactive['Stoneskin'] then
send_command('@wait 0.7; input //cancel Stoneskin; input /echo Refreshing Stoneskin.')
end
end
if spell.english == 'Phalanx' then
equip(sets.Utility.Phalanx)
if buffactive['Embolden'] then
equip(sets.JA.Embolden)
end
if spell.english == 'Temper' then
equip({head="Erilaz galea"})
end
end
if spell.english == 'Regen IV' then
equip(sets.Utility.Regen)
if buffactive['Embolden'] then
equip(sets.JA.Embolden)
end
end
if spell.english == 'Refresh' then
equip(sets.Utility.Refresh)
if buffactive['Embolden'] then
equip(sets.JA.Embolden)
end
end
if spell.english == 'Protect IV' or spell.english == 'Shell V' then
equip(sets.Utility.Defense)
if buffactive['Embolden'] then
equip(sets.JA.Embolden)
end
end
if spell.english == 'Flash' or spell.english == 'Foil' or spell.english == 'Valiance' or spell.english == 'Vallation' or spell.english == 'One For All' or spell.english == 'Swordplay' or spell.english == 'Battuta' or spell.english == 'Pflug' or spell.english == 'Rune Enchantment' or spell.english == 'Embolden' or spell.english == 'Liement' or spell.skill == 'Blue Magic' then
equip(sets.Utility.Enmity)
end
if spell.english == 'Utsusemi: Ichi' then
equip(sets.Utility.Utsusemi)
if buffactive['Copy Image (3)'] then
send_command('@wait 0.3; input //cancel Copy Image (3)')
end
if buffactive['Copy Image (2)'] then
send_command('@wait 0.3; input //cancel Copy Image (2)')
end
if buffactive['Copy Image (1)'] then
send_command('@wait 0.3; input //cancel Copy Image (1)')
end
if buffactive['Copy Image'] then
send_command('@wait 0.3; input //cancel Copy Image')
end
end
if spell.english == 'Utsusemi: Ni' then
equip(sets.Utility.Utsusemi)
end
if spell.english == 'Vallation' or spell.english == 'Valiance' then
equip(sets.JA.Vallation)
end
if spell.english == 'Battuta' then
equip(sets.JA.Battuta)
end
if spell.english == 'Pflug' then
equip(sets.JA.Pflug)
end
if spell.english == 'Gambit' then
equip(sets.JA.Gambit)
end
if spell.english == 'Embolden' then
equip(sets.JA.Embolden)
end
if spell.english == 'Vivacious Pulse' then
equip(sets.JA.VivPulse)
end
if spell.english == 'Liement' then
equip(sets.JA.Liement)
end
if spell.english == 'Elemental Sforzo' then
equip(sets.JA.EleSforzo)
end
if spell.english == 'Swordplay' then
equip(sets.JA.Swordplay)
end
end
function aftercast(spell)
if player.status == 'Engaged' then
equip(sets.TP[sets.TP.index[TP_ind]])
else
equip(sets.Idle[sets.Idle.index[Idle_ind]])
end
end
function status_change(new,old)
if new == 'Engaged' then
equip(sets.TP[sets.TP.index[TP_ind]])
else
equip(sets.Idle[sets.Idle.index[Idle_ind]])
end
end
function self_command(command)
if command == 'toggle TP set' then
TP_ind = TP_ind +1
if TP_ind > #sets.TP.index then TP_ind = 1 end
send_command('@input /echo <----- TP Set changed to '..sets.TP.index[TP_ind]..' ----->')
equip(sets.TP[sets.TP.index[TP_ind]])
elseif command == 'toggle Idle set' then
Idle_ind = Idle_ind +1
if Idle_ind > #sets.Idle.index then Idle_ind = 1 end
send_command('@input /echo <----- Idle Set changed to '..sets.Idle.index[Idle_ind]..' ----->')
equip(sets.Idle[sets.Idle.index[Idle_ind]])
elseif command == 'toggle Res set' then
Resolution_ind = Resolution_ind +1
if Resolution_ind > #sets.Resolution.index then Resolution_ind = 1 end
send_command('@input /echo <----- Resolution set changed to '..sets.Resolution.index[Resolution_ind]..' ----->')
elseif command == 'toggle Dim set' then
Dimidiation_ind = Dimidiation_ind +1
if Dimidiation_ind > #sets.Dimidiation.index then Dimidiation_ind = 1 end
send_command('@input /echo <----- Dimidiation set changed to '..sets.Dimidiation.index[Dimidiation_ind]..' ----->')
elseif command == 'toggle Req set' then
Requiescat_ind = Requiescat_ind +1
if Requiescat_ind > #sets.Requiescat.index then Requiescat_ind = 1 end
send_command('@input /echo <----- Requiescat Set changed to '..sets.Requiescat.index[Requiescat_ind]..' ----->')
elseif command == 'equip TP set' then
equip(sets.TP[sets.TP.index[TP_ind]])
elseif command == 'equip Idle set' then
equip(sets.Idle[sets.Idle.index[Idle_ind]])
end
end
By Dsuza 2019-01-22 00:16:34
Still need help with the below 2 posts, I am quoting myself again
Thanks guys
Bismarck.Affinty
サーバ: Bismarck
Game: FFXI
Posts: 16
By Bismarck.Affinty 2019-01-22 00:16:43
Hey guys, I hope you all have been well.
I have 2 issues going on right now
For my WAR, I want specific/different gear to equip for WS when Mighty Strikes is up.
And for my THF:
I want Frenzy Sallet to equip when I am engaged and asleep.
Thank you very much in advance for your time and help
WAR: Please look at line(s) 1-6 and 211-216
Code sets.MS_WS = {
ammo="Yetshila +1",
head={ name="Valorous Mask", augments={'Accuracy+29','Crit. hit damage +3%','DEX+15','Attack+13',}},
hands={ name="Valorous Mitts", augments={'Accuracy+20 Attack+20','Crit. hit damage +4%','VIT+2','Attack+13',}},
feet="Boii Calligae +1",
}
----------------------
-- Misc. Gearsets --
----------------------
sets.Reive = {
neck="Adoulin's Refuge +1"
}
sets.buff.Doom = {
ring2="Purity Ring"
}
sets.Reraise = {
head="Twilight helm",
body="Twilight mail"
}
sets.regen = {
head="Twilight helm",
body="Twilight mail",
neck="Sanctity Necklace",
ring1="Paguroidea Ring",
}
sets.PDT = {
ammo="Seeth. Bomblet +1",
head="Arke Zuchetto +1",
body="Arke Corazza +1",
hands="Souv. Handsch. +1",
legs="Arke Cosc. +1",
feet="Souveran Schuhs +1",
neck="Combatant's Torque",
waist="Ioskeha Belt +1",
left_ear="Odnowa Earring",
right_ear="Odnowa Earring +1",
left_ring="Moonlight Ring",
right_ring="Moonlight Ring",
back={ name="Cichol's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
sets.defense.PDT = {
ammo="Seeth. Bomblet +1",
head="Arke Zuchetto +1",
body="Arke Corazza +1",
hands="Souv. Handsch. +1",
legs="Arke Cosc. +1",
feet="Souveran Schuhs +1",
neck="Combatant's Torque",
waist="Ioskeha Belt +1",
left_ear="Odnowa Earring",
right_ear="Odnowa Earring +1",
left_ring="Moonlight Ring",
right_ring="Moonlight Ring",
back={ name="Cichol's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
end
--------------------------
-- Custom Idle Gearset --
--------------------------
function customize_idle_set(idleSet)
--[[ if player.mpp < 50 then
idleSet = set_combine(idleSet, sets.latent_refresh)
end
if player.mpp < 80 then
idleSet = set_combine(idleSet, sets.refresh)
end
if player.hpp < 80 then
idleSet = set_combine(idleSet, sets.regen)
end --]]
if state.Buff.Doom then
idleSet = set_combine(idleSet, sets.buff.Doom)
end
--[[ if buffactive['Weakness'] then
equip({head="Twilight helm", body="Twilight mail"})
disable('head', 'body')
else
enable('head', 'body')
end --]]
if state.CapacityMode.value then
idleSet = set_combine(idleSet, sets.CapacityMantle)
end
if S{"Eastern Adoulin","Western Adoulin"}:contains(world.area) then
idleSet = set_combine(idleSet,{body="Councilor's Garb", head="Jumalik helm"})
end
return idleSet
end
------------------------------
-- Custom melee Gearset --
------------------------------
function customize_melee_set(meleeSet)
if state.Buff.Sleep and player.hp > 120 and player.status == "Engaged" then
-- Equip Berserker's Torque When You Are Asleep
meleeSet = set_combine(meleeSet,{neck="Berserker's Torque"})
end
if player.hp < 800 then
meleeSet = set_combine(meleeSet, sets.defense.PDT)
add_to_chat(8, 'Low HP" Switching to PDT set')
end
--[[ if player.hp < 800 then
meleeSet = set_combine(meleeSet, sets.Reraise)
add_to_chat(8, 'Low HP" Switching to PDT set')
end--]]
if state.Buff.Doom then
meleeSet = set_combine(meleeSet, sets.buff.Doom)
end
if state.Buff['Souleater'] then
meleeSet = set_combine(meleeSet, sets.buff.Souleater)
end
--[[ if spell.type=='WeaponSkill' and state.Buff['Souleater'] then
if moonshade_WS:contains(spell.english) and player.tp < 2900 then
equip({left_ear="Moonshade Earring"})
end
end--]]
--[[ if buffactive['Weakness'] then
equip({head="Twilight helm", body="Twilight mail"})
add_to_chat(8, '--ReRaise Set Engaged--')
else
enable('head', 'body')
end--]]
if state.CapacityMode.value then
meleeSet = set_combine(meleeSet, sets.CapacityMantle)
end
--[[ if buffactive['Arcane Circle'] then
meleeSet = set_combine(meleeSet, {body="Founder's Breastplate"})
end--]]
return meleeSet
end
----------------------------------------------
-- General hooks for setting combat state --
----------------------------------------------
------------------------------------------------------------------
-- 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_status_change(newStatus, oldStatus, eventArgs)
if newStatus == "Engaged" then
get_combat_weapon()
end
end
function job_update(cmdParams, eventArgs)
war_sj = player.sub_job == 'WAR' or false
get_combat_form()
get_combat_weapon()
update_melee_groups()
end
function get_combat_form()
-- if buffactive['Last Resort'] and buffactive.haste then
-- add_to_chat(8, '---Weapon Delay Capped---')
-- elseif (buffactive.haste and buffactive.hasso and buffactive.march == 2) then
-- add_to_chat(8, '---Weapon Delay is not Capped---')
-- end
------------------------------------------------------
-- Can add in more here this is just a placeholder --
------------------------------------------------------
end
function get_combat_weapon()
-- handle weapon sets
if player.equipment.main == 'Ragnarok' then
state.CombatWeapon:set('Ragnarok')
elseif player.equipment.main == 'Montante +1' then
state.CombatWeapon:set('Montante')
elseif player.equipment.main == 'Raetic Algol +1' then
state.CombatWeapon:set('Raetic')
elseif player.equipment.main == 'Chango' then
state.CombatWeapon:set('Chango')
elseif player.equipment.main == 'Reikiko' then
state.CombatWeapon:set('Reikiko')
elseif player.equipment.main == 'Tanmogayi +1' then
state.CombatWeapon:set('Tanmogayi')
elseif player.equipment.main == 'Loxotic Mace +1' then
state.CombatWeapon:set('Loxotic')
else
--Neither Rag nor Montante equipped, use sets.engaged
state.CombatWeapon:reset()
end
end
function job_state_change(stateField, newValue, oldValue)
--nothing added in here
end
function update_melee_groups()
classes.CustomMeleeGroups:clear()
-- mythic AM
if player.equipment.main == 'Liberator' then
if buffactive['Aftermath: Lv.3'] then
classes.CustomMeleeGroups:append('AM3')
end
elseif buffactive['Aftermath'] then
classes.CustomMeleeGroups:append('AM')
end
if buffactive['Samurai Roll'] then
classes.CustomRangedGroups:append('SamRoll')
end
end
--------------------------------------------------
-- Creating a custom spellMap, --
-- since Mote capitalized absorbs incorrectly --
--------------------------------------------------
function job_get_spell_map(spell, default_spell_map)
if spell.skill == 'Dark Magic' and absorbs:contains(spell.english) then
return 'Absorb'
end
end
----------------------
-- Precast section --
----------------------
function job_post_precast(spell, action, spellMap, eventArgs)
if spell.type == 'WeaponSkill' then
if buffactive['Mighty Strikes'] then
if sets.precast.WS[spell] then
equip(sets.MS_WS)
end
end
end
if spell.action_type=="Magic" and buffactive.Silence then
eventArgs.cancel = true
send_command('input /item "Echo Drops" <me>')
end
if spell.type=='WeaponSkill' then
if moonshade_WS:contains(spell.english) and player.tp < 2900 then
equip({left_ear="Moonshade Earring"})
end
end
if spell.type == 'WeaponSkill' then
if state.Buff['Souleater'] then
equip(sets.buff.Souleater)
end
end
if spell.type == 'WeaponSkill' then
if spell.target.distance > 8 then
cancel_spell()
add_to_chat(8, 'Target to far away. Move closer')
return
end
end
end
----------------------
-- Midcast Section --
----------------------
function job_post_midcast(spell, action, spellMap, eventArgs)
if spell.skill == 'Elemental Magic' then
if spell.element == world.day_element or spell.element == world.weather_element then
equip(sets.midcast['Elemental Magic'], {waist="Hachirin-no-Obi"})
end
end
--[[ if S{"Tachi: Jinpu","Tachi: Fudo","Catastrophe","Scourge","Cross Reaper"}:contains(spell.english) and (spell.element==world.day_element or spell.element==world.weather_element) then
equip({head="Gavialis Helm"})
end--]]
if S{"Drain","Drain II","Drain III", "Aspir", "Aspir II", "Aspir III"}:contains(spell.english) and (spell.element==world.day_element or spell.element==world.weather_element) then
equip({waist="Hachirin-no-obi"})
end
--[[ equip(sets.MAXDrain)
add_to_chat(100,'WARNING: Misanthropy is now equiped ** Manually Swap weapons ***')
end--]]
if buffactive['Dark Seal'] and S{"Drain III"}:contains(spell.english)then
equip({head="Fallen's Burgeonet +1"})
end
if buffactive['Dark Seal'] and S{"Absorb-STR"}:contains(spell.english)then
equip({head="Fallen's Burgeonet +1"})
end
if buffactive['Dark Seal'] and S{"Absorb-VIT"}:contains(spell.english)then
equip({head="Fallen's Burgeonet +1"})
end
end
------------------------------------------------------------------
-- Called when a player gains or loses a buff. --
-- buff == buff gained or lost --
-- gain == true if the buff was gained, false if it was lost. --
------------------------------------------------------------------
function job_buff_change(buff, gain)
if state.Buff[buff] ~= nil then
state.Buff[buff] = gain
handle_equipping_gear(player.status)
end
if buff:lower()=='terror' or buff:lower()=='petrification' or buff:lower()=='sleep' or buff:lower()=='stun' then
if gain then
equip(sets.defense.PDT)
add_to_chat(8, 'PDT set is equiped')
elseif not gain then
handle_equipping_gear(player.status)
end
end
if buff:lower()=='sleep' then
if gain and player.hp > 120 and player.status == "Engaged" then -- Equip Berserker's Torque / frenzy When You Are Asleep
equip({neck="Berserker's Torque"})
elseif not gain then -- Take Berserker's off
handle_equipping_gear(player.status)
end
end
if buffactive['Reive Mark'] then
equip(sets.Reive)
disable('neck')
else
enable('neck')
end
if buffactive['Souleater'] then
equip({head="Ig. Burgonet +3"})
disable('Head')
add_to_chat(100,'WARNING: Souleater set equiped.')
else
enable('Head')
end
if buffactive['Blood Weapon'] and buffactive['Souleater'] and player.hp > 8000 then
equip({main="Dacnomania", head="Ig. Burgonet +3"})
disable('Head')
--add_to_chat(100,'WARNING: SOUL EATER HEAD ON AND &&&& Dacnomania.')
else
enable('Head')
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')
else
enable('ring1','ring2','waist')
handle_equipping_gear(player.status)
end
end
--[[ Checks if Last resort is active if so cancels Hasso, will put
hasso back on after Last Resort falls off. ]]
if buff == "Last Resort" and player.status == 'Engaged' then
if gain then
send_command('@wait 1.0;cancel hasso')
elseif not midaction() then
send_command('@wait 1.0;input /ja "Hasso" <me>')
end
end
--[[ Drain II HP Boost. Set SE to stay on. ]]
if buff == "Max HP Boost" and state.SouleaterMode.value then
if gain or buffactive['Max HP Boost'] then
state.SouleaterMode:set(false)
else
state.SouleaterMode:set(true)
end
end
--[[ Make sure SE stays on for BW ]]
if buff == 'Blood Weapon' and state.SouleaterMode.value then
if gain or buffactive['Blood Weapon'] then
state.SouleaterMode:set(false)
else
state.SouleaterMode:set(true)
end
end
--[[ AM custom groups ]]
--[[ if buff:startswith('Aftermath') then
if player.equipment.main == 'Liberator' then
classes.CustomMeleeGroups:clear()
if (buff == "Aftermath: Lv.3" and gain) or buffactive['Aftermath: Lv.3'] then
classes.CustomMeleeGroups:append('AM3')
add_to_chat(8, '-------------AM3 UP-------------')
end
if not midaction() then
handle_equipping_gear(player.status)
end
else
classes.CustomMeleeGroups:clear()
if player.equipment.main == "Masamune" then
if buff == "Aftermath" and gain or buffactive.Aftermath then
classes.CustomMeleeGroups:append('AM')
add_to_chat(8, '--Masamune haste is active. Switching to AM set--')
end
end
if player.equipment.main == 'Amanomurakumo' then
if buff == 'Aftermath' and gain then
add_to_chat(8, '---Amanomurakumo AM active providing Crit---')
end
end
if not midaction() then
handle_equipping_gear(player.status)
end
end
end--]]
end
----------------------------------
-- Sub job section for Ninja --
----------------------------------
ninjaTools = {
Utsusemi = S{"Shihei",},--"Shikanofuda"
Hojo = S{"Kaginawa",},--"Chonofuda"
Migawari = S{"Mokujin",},
Kakka = S{"Ryuno",},
Tonko = S{"Shinobi-tabi",},
Kurayami = S{"Sairui-Ran",},
Raiton = S{"Hiraishin",},
Hyoton = S{"Tsurara",},
Monomi = S{"Sanjaku-Tenugui",},
}
function job_precast(spell, action, spellMap, eventArgs)
if spell.type=="Ninjutsu" then check_tools(spell) end
end
function check_tools(spell)
for prefix,tools in pairs(ninjaTools) do
if spell.english:startswith(prefix) then
for tool in tools:it() do
if not player.inventory[tool] then
add_to_chat(100,'WARNING: You are out of '..tool..'.')
elseif player.inventory[tool].count < 10 then
add_to_chat(100,'WARNING: You are low on '..tool..'. '..player.inventory[tool].count..' remaining.')
end
end
end
end
end
--------------------------------------------------------------
-- Rune Fencer Sub Job section for displaying rune info --
--------------------------------------------------------------
function define_rune_info()
rune_info = {
["Ignis"] = {damage="Fire", resistance="Ice"},
["Gelus"] = {damage="Ice", resistance="Wind"},
["Flabra"] = {damage="Wind", resistance="Earth"},
["Tellus"] = {damage="Earth", resistance="Lightning"},
["Sulpor"] = {damage="Lightning", resistance="Water"},
["Unda"] = {damage="Water", resistance="Fire"},
["Lux"] = {damage="Light", resistance="Darkness"},
["Tenebrae"]= {damage="Darkness", resistance="Light"},
}
end
function display_rune_info(spell)
runeinfo = rune_info[spell.english]
if runeinfo then
add_to_chat(122, '*'..spell.english..' is '..runeinfo.damage..'-based dmg. and '..runeinfo.resistance..' resistance*')
end
end
function job_self_command(cmdParams, eventArgs)
if cmdParams[1]:lower() == 'rune' then
send_command('@input /ja '..state.Runes.value..' <me>')
end
end
------------------------------------------------------------------
-- Selecting and Setting the default Macro book and Lock style --
------------------------------------------------------------------
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'DRK' then
set_macro_page(1, 2)
elseif player.sub_job == 'SAM' then
set_macro_page(1, 2)
elseif player.sub_job == 'RUN' --[[and player.equipment.main == '['Dojikiri Yasutsuna']'--]] then
set_macro_page(1, 2)
elseif player.sub_job == 'THF' then
set_macro_page(1, 2)
else
set_macro_page(1, 2)
end
end
function set_lockstyle()
send_command('wait 6;input /lockstyleset 060')
end
Bismarck.Affinty
サーバ: Bismarck
Game: FFXI
Posts: 16
By Bismarck.Affinty 2019-01-22 00:17:06
And for THF:
Code function job_buff_change(buff, gain)
if state.Buff[buff] ~= nil then
state.Buff[buff] = gain
handle_equipping_gear(player.status)
end
if buff:lower()=='terror' or buff:lower()=='petrification' or buff:lower()=='sleep' or buff:lower()=='stun' then
if gain then
equip(sets.idle.DT)
add_to_chat(8, 'DT set is equiped')
elseif not gain then
handle_equipping_gear(player.status)
end
end
if buff:lower()=='sleep' then
if gain and player.hp > 120 and player.status == "Engaged" then -- Equip Berserker's Torque / frenzy When You Are Asleep
equip({head="Frenzy Sallet"})
elseif not gain then -- Take Berserker's off
handle_equipping_gear(player.status)
end
end
end
Asura.Byrne
By Asura.Byrne 2019-01-22 01:19:28
Hi, I have a problem of spells not switching from precast to midcast. Either the spell would use precast set or midcast set but never precast then midcast.
Checked with equipviewer and the gear doesn't seem to switch.
Code function get_sets()
send_command('bind f9 gs c toggle TP set')
send_command('bind f10 gs c toggle Idle set')
send_command('bind f11 gs c toggle Res set')
send_command('bind f12 gs c toggle Dim set')
send_command('bind ^f11 gs c toggle Req set')
function file_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')
end
--Idle Sets--
sets.Idle = {}
sets.Idle.index = {'Standard', 'DT'}
Idle_ind = 1
sets.Idle.DT = {
ammo="Staunch Tathlum +1",
head="Aya. Zucchetto +2",
body="Ayanmo Corazza +2",
hands={ name="Adhemar Wrist. +1", augments={'STR+12','DEX+12','Attack+20',}},
legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
feet="Aya. Gambieras +2",
neck="Anu Torque",
waist="Ioskeha Belt +1",
left_ear="Telos Earring",
right_ear="Sherida Earring",
left_ring="Moonlight Ring",
right_ring="Moonlight Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
sets.Idle.Standard = {
ammo="Staunch Tathlum +1",
head="Aya. Zucchetto +2",
body="Ayanmo Corazza +2",
hands={ name="Adhemar Wrist. +1", augments={'STR+12','DEX+12','Attack+20',}},
legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
feet="Aya. Gambieras +2",
neck="Anu Torque",
waist="Ioskeha Belt +1",
left_ear="Telos Earring",
right_ear="Sherida Earring",
left_ring="Moonlight Ring",
right_ring="Moonlight Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
--TP Sets--
sets.TP = {}
sets.TP.index = {'Standard', 'HBDT', 'DT'}
--1=Standard, 2=AccuracyLite, 3=AccuracyFull, 4=DT, 5=DTAccuracy--
TP_ind = 1
sets.TP.Standard = {
ammo="Ginsen",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Adhemar Jacket +1", augments={'STR+12','DEX+12','Attack+20',}},
hands={ name="Adhemar Wrist. +1", augments={'STR+12','DEX+12','Attack+20',}},
legs={ name="Samnuha Tights", augments={'STR+10','DEX+10','"Dbl.Atk."+3','"Triple Atk."+3',}},
feet={ name="Herculean Boots", augments={'"Triple Atk."+3','DEX+11','Accuracy+13','Attack+9',}},
neck="Anu Torque",
waist="Ioskeha Belt +1",
left_ear="Telos Earring",
right_ear="Sherida Earring",
left_ring="Epona's Ring",
right_ring="Ilabrat Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
sets.TP.HBDT = {
ammo="Staunch Tathlum +1",
head="Aya. Zucchetto +2",
body="Ayanmo Corazza +2",
hands="Turms Mittens +1",
legs="Eri. Leg Guards +1",
feet="Turms Leggings +1",
neck="Anu Torque",
waist="Ioskeha Belt +1",
left_ear="Telos Earring",
right_ear="Sherida Earring",
left_ring="Vocane Ring",
right_ring="Defending Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
sets.TP.DT = {
ammo="Staunch Tathlum +1",
head="Aya. Zucchetto +2",
body={ name="Futhark Coat +1", augments={'Enhances "Elemental Sforzo" effect',}},
hands="Turms Mittens +1",
legs="Eri. Leg Guards +1",
feet="Turms Leggings +1",
neck="Twilight Torque",
waist="Ioskeha Belt +1",
left_ear="Telos Earring",
right_ear="Sherida Earring",
left_ring="Vocane Ring",
right_ring="Defending Ring",
back="Moonbeam Cape",
}
--Weaponskill Sets--
sets.WS = {}
sets.Resolution = {}
sets.Resolution.index = {'Attack','Accuracy'}
Resolution_ind = 1
sets.Resolution.Attack = {
ammo="Knobkierrie",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Adhemar Jacket +1", augments={'STR+12','DEX+12','Attack+20',}},
hands="Meg. Gloves +2",
legs={ name="Herculean Trousers", augments={'Accuracy+24','Weapon skill damage +4%','Attack+7',}},
feet={ name="Herculean Boots", augments={'"Triple Atk."+3','DEX+11','Accuracy+13','Attack+9',}},
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear={ name="Moonshade Earring", augments={'Rng.Atk.+4','TP Bonus +250',}},
right_ear="Sherida Earring",
left_ring="Regal Ring",
right_ring="Niqmaddu Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
}
sets.Resolution.Accuracy = {
ammo="Knobkierrie",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Adhemar Jacket +1", augments={'STR+12','DEX+12','Attack+20',}},
hands="Meg. Gloves +2",
legs={ name="Herculean Trousers", augments={'Accuracy+24','Weapon skill damage +4%','Attack+7',}},
feet={ name="Herculean Boots", augments={'"Triple Atk."+3','DEX+11','Accuracy+13','Attack+9',}},
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear={ name="Moonshade Earring", augments={'Rng.Atk.+4','TP Bonus +250',}},
right_ear="Sherida Earring",
left_ring="Regal Ring",
right_ring="Niqmaddu Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
}
sets.Dimidiation = {}
sets.Dimidiation.index = {'Attack','Accuracy'}
Dimidiation_ind = 1
sets.Dimidiation.Attack = {
ammo="Knobkierrie",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Adhemar Jacket +1", augments={'STR+12','DEX+12','Attack+20',}},
hands="Meg. Gloves +2",
legs={ name="Herculean Trousers", augments={'Accuracy+24','Weapon skill damage +4%','Attack+7',}},
feet={ name="Herculean Boots", augments={'"Triple Atk."+3','DEX+11','Accuracy+13','Attack+9',}},
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear={ name="Moonshade Earring", augments={'Rng.Atk.+4','TP Bonus +250',}},
right_ear="Sherida Earring",
left_ring="Niqmaddu Ring",
right_ring="Ilabrat Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
}
sets.Dimidiation.Accuracy = {
ammo="Knobkierrie",
head={ name="Adhemar Bonnet +1", augments={'STR+12','DEX+12','Attack+20',}},
body={ name="Adhemar Jacket +1", augments={'STR+12','DEX+12','Attack+20',}},
hands="Meg. Gloves +2",
legs={ name="Herculean Trousers", augments={'Accuracy+24','Weapon skill damage +4%','Attack+7',}},
feet={ name="Herculean Boots", augments={'"Triple Atk."+3','DEX+11','Accuracy+13','Attack+9',}},
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear={ name="Moonshade Earring", augments={'Rng.Atk.+4','TP Bonus +250',}},
right_ear="Sherida Earring",
left_ring="Niqmaddu Ring",
right_ring="Ilabrat Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
}
sets.Requiescat = {}
sets.Requiescat.index = {'Attack','Accuracy'}
Requiescat_ind = 1
sets.Requiescat.Attack = {ammo="Potestas bomblet",
head="Whirlpool mask",neck="Fotia gorget",ear1="Brutal earring",ear2="Moonshade earring",
body="Manibozho jerkin",hands="Umuthi gloves",ring1="Epona's ring",ring2="Aquasoul ring",
back="Atheling mantle",waist="Fotia belt",legs="Quiahuiz trousers",feet="Meg. Jam. +1"}
sets.Requiescat.Accuracy = {ammo="Honed tathlum",
head="Whirlpool mask",neck="Fotia gorget",ear1="Brutal earring",ear2="Moonshade earring",
body="Manibozho jerkin",hands="Umuthi gloves",ring1="Epona's ring",ring2="Aquasoul ring",
back="Letalis mantle",waist="Fotia belt",legs="Quiahuiz trousers",feet="Meg. Jam. +1"}
--Utility Sets--
sets.Enmity = {
ammo="Sapience Orb",
head="Aya. Zucchetto +2",
body={ name="Futhark Coat +1", augments={'Enhances "Elemental Sforzo" effect',}},
hands="Kurys Gloves",
legs="Eri. Leg Guards +1",
feet="Ahosi Leggings",
neck="Moonlight Necklace",
waist="Goading Belt",
left_ear="Friomisi Earring",
right_ear="Sherida Earring",
left_ring="Petrov Ring",
right_ring="Begrudging Ring",
}
sets.Utility = {}
sets.Utility.PDT = {ammo="Staunch Tathlum",
head="Fu. bandeau +1",neck="Twilight torque", ear1="Ethereal earring",
body="Futhark coat +1",hands="Buremte Gloves",ring1="Defending ring",ring2="Warden's ring",
back="Shadow mantle",waist="Flume Belt +1",legs="Erilaz Leg Guards +1",feet="Erilaz Greaves +1"}
sets.Utility.MDT = {ammo="Staunch tathlum",
head="Haruspex hat",neck="Warder's charm +1",
body="Futhark coat +1",hands="Erilaz gauntlets +1",ring1="Defending ring",ring2="Shadow ring",
back="Mollusca mantle",legs="Erilaz Leg Guards +1",feet="Erilaz Greaves +1"}
sets.Utility.Stoneskin = {
ammo = "Sapience Orb",
head = "Erilaz Galea +1",
neck = "Incanter's Torque",
ear1 = "Andoaa Earring",
ear2 = "Loquacious Earring",
body = "Futhark Coat +1",
hands = "Runeist's Mitons +1",
ring1 = "Stikini Ring +1",
ring2 = "Stikini Ring +1",
back = "Moonbeam Cape",
waist = "Flume Belt",
legs = "Futhark Trousers +1",
feet = "Erilaz Greaves +1"
}
sets.Utility.Phalanx = {
ammo = "Sapience Orb",
head = "Futhark Bandeau +1",
neck = "Incanter's Torque",
ear1 = "Andoaa Earring",
ear2 = "Loquacious Earring",
body = "Manasa Chasuble",
hands={ name="Herculean Gloves", augments={'STR+2','"Rapid Shot"+6','Phalanx +3','Accuracy+18 Attack+18','Mag. Acc.+7 "Mag.Atk.Bns."+7',}},
ring1 = "Stikini Ring +1",
ring2 = "Stikini Ring +1",
back = "Moonbeam Cape",
waist = "Flume Belt",
legs = "Carmine Cuisses +1",
feet = "Erilaz Greaves +1"
}
sets.Utility.Regen = {
ammo = "Sapience Orb",
head = "Erilaz Galea +1",
neck = "Incanter's Torque",
ear1 = "Andoaa Earring",
ear2 = "Loquacious Earring",
body = "Futhark Coat +1",
hands = "Runeist's Mitons +1",
ring1 = "Stikini Ring +1",
ring2 = "Stikini Ring +1",
back = "Moonbeam Cape",
waist = "Flume Belt",
legs = "Futhark Trousers +1",
feet = "Erilaz Greaves +1"
}
sets.Utility.Refresh = {
ammo = "Sapience Orb",
head = "Erilaz Galea +1",
neck = "Incanter's Torque",
ear1 = "Andoaa Earring",
ear2 = "Loquacious Earring",
body = "Futhark Coat +1",
hands = "Runeist's Mitons +1",
ring1 = "Stikini Ring +1",
ring2 = "Stikini Ring +1",
back = "Moonbeam Cape",
waist = "Flume Belt",
legs = "Futhark Trousers +1",
feet = "Erilaz Greaves +1"
}
sets.Utility.Utsusemi = {}
sets.Utility.Defense = {}
sets.Utility.Enmity = {
ammo="Sapience Orb",
head="Aya. Zucchetto +2",
body={ name="Futhark Coat +1", augments={'Enhances "Elemental Sforzo" effect',}},
hands="Kurys Gloves",
legs="Eri. Leg Guards +1",
feet="Ahosi Leggings",
neck="Moonlight Necklace",
waist="Goading Belt",
left_ear="Friomisi Earring",
right_ear="Sherida Earring",
left_ring="Petrov Ring",
right_ring="Begrudging Ring",
}
--Job Ability Sets--
sets.JA = {}
sets.JA.Lunge = {
ammo="Erlene's Notebook",
head={ name="Herculean Helm", augments={'Attack+14','Weapon skill damage +4%','AGI+10',}},
body={ name="Carm. Sc. Mail +1", augments={'Attack+20','"Mag.Atk.Bns."+12','"Dbl.Atk."+4',}},
hands={ name="Carmine Fin. Ga. +1", augments={'Rng.Atk.+20','"Mag.Atk.Bns."+12','"Store TP"+6',}},
legs="Aya. Cosciales +2",
feet={ name="Herculean Boots", augments={'"Triple Atk."+3','DEX+11','Accuracy+13','Attack+9',}},
neck="Sanctity Necklace",
waist="Ioskeha Belt +1",
left_ear="Friomisi Earring",
right_ear="Sherida Earring",
left_ring="Ilabrat Ring",
right_ring="Regal Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
sets.JA.Sforzo = set_combine(sets.Enmity, {
body = "Futhark Coat +1"
})
sets.JA.Swordplay = set_combine(sets.Enmity, {
hands = "Futhark Mitons +1"
})
sets.JA.Vallation = set_combine(sets.Enmity, {
body = "Runeist's Coat +1",
legs = "Futhark Trousers +1",
back = "Ogma's Cape"
})
sets.JA.Pflug = set_combine(sets.Enmity, {
feet = "Runeist's Boots +1"
})
sets.JA.Valiance = set_combine(sets.Enmity, {
body = "Runeist's Coat +1",
legs = "Futhark Trousers +1",
})
sets.JA.Embolden = set_combine(sets.Enmity, {
})
sets.JA.Pulse = set_combine(sets.Enmity, {
head = "Erilaz Galea +1",
neck = "Incanter's Torque",
ring2 = "Stikini Ring",
legs = "Runeist's Trousers +1"
})
sets.JA.Gambit = set_combine(sets.Enmity, {
hands = "Runeist's Mitons +1"
})
sets.JA.Battuta = set_combine(sets.Enmity, {
head = "Futhark Bandeau +1"
})
sets.JA.Rayke = set_combine(sets.Enmity, {
feet = "Futhark Boots +1"
})
sets.JA.Liement = set_combine(sets.Enmity, {
body = "Futhark Coat +1"
})
--One For All is HP * .2 = Magic Damage Reduction--
sets.JA.One = set_combine(sets.Enmity, {
ammo = "Falcon Eye",
head = "Halitus Helm",
neck = "Sanctity Necklace",
ear1 = "Etiolation Earring",
ear2 = "Odnowa Earring +1",
body = "Runeist's Coat +1",
hands = "Runeist's Mitons +1",
ring1 = "Regal Ring",
ring2 = "Ilabrat Ring",
back = "Moonbeam Cape",
waist = "Kasiri Belt",
legs = "Erilaz Leg Guards +1",
Feet = "Carmine Greaves +1"
})
sets.JA.Subterfuge = set_combine(sets.Enmity, {})
--Precast Sets--
sets.precast = {}
sets.precast.FC = {}
sets.precast.FC.Standard = {
ammo="Sapience Orb",
head={ name="Carmine Mask +1", augments={'Accuracy+20','Mag. Acc.+12','"Fast Cast"+4',}},
body={ name="Samnuha Coat", augments={'Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+5','"Dual Wield"+5',}},
hands={ name="Leyline Gloves", augments={'Accuracy+12','Mag. Acc.+14','"Mag.Atk.Bns."+15','"Fast Cast"+2',}},
legs="Aya. Cosciales +2",
feet="Aya. Gambieras +2",
neck="Anu Torque",
waist="Ioskeha Belt +1",
left_ear="Loquac. Earring",
right_ear="Sherida Earring",
right_ring="Moonlight Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
sets.precast.FC.Enhancing = {
ammo="Sapience Orb",
head={ name="Carmine Mask +1", augments={'Accuracy+20','Mag. Acc.+12','"Fast Cast"+4',}},
body={ name="Samnuha Coat", augments={'Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+5','"Dual Wield"+5',}},
hands={ name="Leyline Gloves", augments={'Accuracy+12','Mag. Acc.+14','"Mag.Atk.Bns."+15','"Fast Cast"+2',}},
legs = "Futhark Trousers +1",
feet="Aya. Gambieras +2",
neck="Anu Torque",
waist="Ioskeha Belt +1",
left_ear="Loquac. Earring",
right_ear="Sherida Earring",
right_ring="Moonlight Ring",
back={ name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
sets.Utility.Enhancing ={
ammo = "Sapience Orb",
head = "Erilaz Galea +1",
left_ear="Loquac. Earring",
body = "Futhark Coat +1",
hands = "Runeist's Mitons +1",
ring1 = "Stikini Ring +1",
ring2 = "Stikini Ring +1",
legs = "Futhark Trousers +1",
feet = "Erilaz Greaves +1"
}
end
function precast(spell)
if spell.skill == 'Divine Magic' then
equip(sets.precast.FC.Standard)
end
if spell.skill == 'Healing Magic' then
equip(sets.precast.FC.Standard)
end
if spell.skill == 'Blue Magic' then
equip(sets.precast.FC.Standard)
end
if spell.skill == 'Enhancing Magic' then
equip(sets.precast.FC.Enhancing)
end
if spell.skill == 'Ninjutsu' then
equip(sets.precast.FC.Standard)
end
if spell.skill == 'Trust' then
equip(sets.precast.FC.Standard)
end
if spell.english == 'Lunge' or spell.english == 'Swipe' or spell.english == "Onca Suit" or spell.english == "Meteor" then
equip(sets.JA.Lunge)
end
if spell.english == 'Vallation' or spell.english == 'Valiance' then
equip(sets.JA.Vallation)
end
if spell.english == 'Battuta' then
equip(sets.JA.Battuta)
end
if spell.english == 'Pflug' then
equip(sets.JA.Pflug)
end
if spell.english == 'Gambit' then
equip(sets.JA.Gambit)
end
if spell.english == 'Embolden' then
equip(sets.JA.Embolden)
end
if spell.english == 'Vivacious Pulse' then
equip(sets.JA.Pulse)
end
if spell.english == 'Liement' then
equip(sets.JA.Liement)
end
if spell.english == 'Elemental Sforzo' then
equip(sets.JA.Sforzo)
end
if spell.english == 'Swordplay' then
equip(sets.JA.Swordplay)
end
if spell.english == 'One For All' then
ChangeGear(sets.JA.One)
end
if spell.english == 'Rayke' then
ChangeGear(sets.JA.Rayke )
end
if spell.english == 'Resolution' or spell.english == 'Shockwave' or spell.english == 'Spinning Slash' or spell.english == 'Ground Strike' then
equip(sets.Resolution[sets.Resolution.index[Resolution_ind]])
end
if spell.english == 'Dimidiation' then
equip(sets.Dimidiation[sets.Dimidiation.index[Dimidiation_ind]])
end
if spell.english == 'Requiescat' then
equip(sets.Requiescat[sets.Requiescat.index[Requiescat_ind]])
end
end
function midcast(spell,act)
if spell.skill == 'Enhancing Magic' then
equip(sets.Utility.Enhancing)
if buffactive['Embolden'] then
equip(sets.JA.Embolden)
end
end
if spell.english == 'Stoneskin' then
equip(sets.Utility.Stoneskin)
if buffactive['Stoneskin'] then
send_command('@wait 0.7; input //cancel Stoneskin; input /echo Refreshing Stoneskin.')
end
end
if spell.english == 'Phalanx' then
equip(sets.Utility.Phalanx)
if buffactive['Embolden'] then
equip(sets.JA.Embolden)
end
if spell.english == 'Temper' then
equip({head="Erilaz galea"})
end
end
if spell.english == 'Regen IV' then
equip(sets.Utility.Regen)
if buffactive['Embolden'] then
equip(sets.JA.Embolden)
end
end
if spell.english == 'Refresh' then
equip(sets.Utility.Refresh)
if buffactive['Embolden'] then
equip(sets.JA.Embolden)
end
end
if spell.english == 'Protect IV' or spell.english == 'Shell V' then
equip(sets.Utility.Defense)
if buffactive['Embolden'] then
equip(sets.JA.Embolden)
end
end
if spell.english == 'Flash' or spell.english == 'Foil' or spell.english == 'Valiance' or spell.english == 'Vallation' or spell.english == 'One For All' or spell.english == 'Swordplay' or spell.english == 'Battuta' or spell.english == 'Pflug' or spell.english == 'Rune Enchantment' or spell.english == 'Embolden' or spell.english == 'Liement' or spell.skill == 'Blue Magic' then
equip(sets.Utility.Enmity)
end
if spell.english == 'Utsusemi: Ichi' then
equip(sets.Utility.Utsusemi)
if buffactive['Copy Image (3)'] then
send_command('@wait 0.3; input //cancel Copy Image (3)')
end
if buffactive['Copy Image (2)'] then
send_command('@wait 0.3; input //cancel Copy Image (2)')
end
if buffactive['Copy Image (1)'] then
send_command('@wait 0.3; input //cancel Copy Image (1)')
end
if buffactive['Copy Image'] then
send_command('@wait 0.3; input //cancel Copy Image')
end
end
if spell.english == 'Utsusemi: Ni' then
equip(sets.Utility.Utsusemi)
end
if spell.english == 'Vallation' or spell.english == 'Valiance' then
equip(sets.JA.Vallation)
end
if spell.english == 'Battuta' then
equip(sets.JA.Battuta)
end
if spell.english == 'Pflug' then
equip(sets.JA.Pflug)
end
if spell.english == 'Gambit' then
equip(sets.JA.Gambit)
end
if spell.english == 'Embolden' then
equip(sets.JA.Embolden)
end
if spell.english == 'Vivacious Pulse' then
equip(sets.JA.VivPulse)
end
if spell.english == 'Liement' then
equip(sets.JA.Liement)
end
if spell.english == 'Elemental Sforzo' then
equip(sets.JA.EleSforzo)
end
if spell.english == 'Swordplay' then
equip(sets.JA.Swordplay)
end
end
function aftercast(spell)
if player.status == 'Engaged' then
equip(sets.TP[sets.TP.index[TP_ind]])
else
equip(sets.Idle[sets.Idle.index[Idle_ind]])
end
end
function status_change(new,old)
if new == 'Engaged' then
equip(sets.TP[sets.TP.index[TP_ind]])
else
equip(sets.Idle[sets.Idle.index[Idle_ind]])
end
end
function self_command(command)
if command == 'toggle TP set' then
TP_ind = TP_ind +1
if TP_ind > #sets.TP.index then TP_ind = 1 end
send_command('@input /echo <----- TP Set changed to '..sets.TP.index[TP_ind]..' ----->')
equip(sets.TP[sets.TP.index[TP_ind]])
elseif command == 'toggle Idle set' then
Idle_ind = Idle_ind +1
if Idle_ind > #sets.Idle.index then Idle_ind = 1 end
send_command('@input /echo <----- Idle Set changed to '..sets.Idle.index[Idle_ind]..' ----->')
equip(sets.Idle[sets.Idle.index[Idle_ind]])
elseif command == 'toggle Res set' then
Resolution_ind = Resolution_ind +1
if Resolution_ind > #sets.Resolution.index then Resolution_ind = 1 end
send_command('@input /echo <----- Resolution set changed to '..sets.Resolution.index[Resolution_ind]..' ----->')
elseif command == 'toggle Dim set' then
Dimidiation_ind = Dimidiation_ind +1
if Dimidiation_ind > #sets.Dimidiation.index then Dimidiation_ind = 1 end
send_command('@input /echo <----- Dimidiation set changed to '..sets.Dimidiation.index[Dimidiation_ind]..' ----->')
elseif command == 'toggle Req set' then
Requiescat_ind = Requiescat_ind +1
if Requiescat_ind > #sets.Requiescat.index then Requiescat_ind = 1 end
send_command('@input /echo <----- Requiescat Set changed to '..sets.Requiescat.index[Requiescat_ind]..' ----->')
elseif command == 'equip TP set' then
equip(sets.TP[sets.TP.index[TP_ind]])
elseif command == 'equip Idle set' then
equip(sets.Idle[sets.Idle.index[Idle_ind]])
end
end
Precast sets only swap for about one frame, so you will miss it if you blink... Aside from that, I can point you to my Gear Swap file for RUN if you don't mind using it instead. I would normally feel happy to make a quick edit, but without searching closely though the whole file... And without sounding too rude, I'm not sure that file is worth the effort to de-conflict given how many good job files do exist.
Asura.Byrne
By Asura.Byrne 2019-01-22 01:26:15
Hey guys, I hope you all have been well.
I have 2 issues going on right now
For my WAR, I want specific/different gear to equip for WS when Mighty Strikes is up.
And for my THF:
I want Frenzy Sallet to equip when I am engaged and asleep.
Thank you very much in advance for your time and help
WAR: Please look at line(s) 1-6 and 211-216
Code sets.MS_WS = {
ammo="Yetshila +1",
head={ name="Valorous Mask", augments={'Accuracy+29','Crit. hit damage +3%','DEX+15','Attack+13',}},
hands={ name="Valorous Mitts", augments={'Accuracy+20 Attack+20','Crit. hit damage +4%','VIT+2','Attack+13',}},
feet="Boii Calligae +1",
}
----------------------
-- Misc. Gearsets --
----------------------
sets.Reive = {
neck="Adoulin's Refuge +1"
}
sets.buff.Doom = {
ring2="Purity Ring"
}
sets.Reraise = {
head="Twilight helm",
body="Twilight mail"
}
sets.regen = {
head="Twilight helm",
body="Twilight mail",
neck="Sanctity Necklace",
ring1="Paguroidea Ring",
}
sets.PDT = {
ammo="Seeth. Bomblet +1",
head="Arke Zuchetto +1",
body="Arke Corazza +1",
hands="Souv. Handsch. +1",
legs="Arke Cosc. +1",
feet="Souveran Schuhs +1",
neck="Combatant's Torque",
waist="Ioskeha Belt +1",
left_ear="Odnowa Earring",
right_ear="Odnowa Earring +1",
left_ring="Moonlight Ring",
right_ring="Moonlight Ring",
back={ name="Cichol's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
sets.defense.PDT = {
ammo="Seeth. Bomblet +1",
head="Arke Zuchetto +1",
body="Arke Corazza +1",
hands="Souv. Handsch. +1",
legs="Arke Cosc. +1",
feet="Souveran Schuhs +1",
neck="Combatant's Torque",
waist="Ioskeha Belt +1",
left_ear="Odnowa Earring",
right_ear="Odnowa Earring +1",
left_ring="Moonlight Ring",
right_ring="Moonlight Ring",
back={ name="Cichol's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
end
--------------------------
-- Custom Idle Gearset --
--------------------------
function customize_idle_set(idleSet)
--[[ if player.mpp < 50 then
idleSet = set_combine(idleSet, sets.latent_refresh)
end
if player.mpp < 80 then
idleSet = set_combine(idleSet, sets.refresh)
end
if player.hpp < 80 then
idleSet = set_combine(idleSet, sets.regen)
end --]]
if state.Buff.Doom then
idleSet = set_combine(idleSet, sets.buff.Doom)
end
--[[ if buffactive['Weakness'] then
equip({head="Twilight helm", body="Twilight mail"})
disable('head', 'body')
else
enable('head', 'body')
end --]]
if state.CapacityMode.value then
idleSet = set_combine(idleSet, sets.CapacityMantle)
end
if S{"Eastern Adoulin","Western Adoulin"}:contains(world.area) then
idleSet = set_combine(idleSet,{body="Councilor's Garb", head="Jumalik helm"})
end
return idleSet
end
------------------------------
-- Custom melee Gearset --
------------------------------
function customize_melee_set(meleeSet)
if state.Buff.Sleep and player.hp > 120 and player.status == "Engaged" then
-- Equip Berserker's Torque When You Are Asleep
meleeSet = set_combine(meleeSet,{neck="Berserker's Torque"})
end
if player.hp < 800 then
meleeSet = set_combine(meleeSet, sets.defense.PDT)
add_to_chat(8, 'Low HP" Switching to PDT set')
end
--[[ if player.hp < 800 then
meleeSet = set_combine(meleeSet, sets.Reraise)
add_to_chat(8, 'Low HP" Switching to PDT set')
end--]]
if state.Buff.Doom then
meleeSet = set_combine(meleeSet, sets.buff.Doom)
end
if state.Buff['Souleater'] then
meleeSet = set_combine(meleeSet, sets.buff.Souleater)
end
--[[ if spell.type=='WeaponSkill' and state.Buff['Souleater'] then
if moonshade_WS:contains(spell.english) and player.tp < 2900 then
equip({left_ear="Moonshade Earring"})
end
end--]]
--[[ if buffactive['Weakness'] then
equip({head="Twilight helm", body="Twilight mail"})
add_to_chat(8, '--ReRaise Set Engaged--')
else
enable('head', 'body')
end--]]
if state.CapacityMode.value then
meleeSet = set_combine(meleeSet, sets.CapacityMantle)
end
--[[ if buffactive['Arcane Circle'] then
meleeSet = set_combine(meleeSet, {body="Founder's Breastplate"})
end--]]
return meleeSet
end
----------------------------------------------
-- General hooks for setting combat state --
----------------------------------------------
------------------------------------------------------------------
-- 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_status_change(newStatus, oldStatus, eventArgs)
if newStatus == "Engaged" then
get_combat_weapon()
end
end
function job_update(cmdParams, eventArgs)
war_sj = player.sub_job == 'WAR' or false
get_combat_form()
get_combat_weapon()
update_melee_groups()
end
function get_combat_form()
-- if buffactive['Last Resort'] and buffactive.haste then
-- add_to_chat(8, '---Weapon Delay Capped---')
-- elseif (buffactive.haste and buffactive.hasso and buffactive.march == 2) then
-- add_to_chat(8, '---Weapon Delay is not Capped---')
-- end
------------------------------------------------------
-- Can add in more here this is just a placeholder --
------------------------------------------------------
end
function get_combat_weapon()
-- handle weapon sets
if player.equipment.main == 'Ragnarok' then
state.CombatWeapon:set('Ragnarok')
elseif player.equipment.main == 'Montante +1' then
state.CombatWeapon:set('Montante')
elseif player.equipment.main == 'Raetic Algol +1' then
state.CombatWeapon:set('Raetic')
elseif player.equipment.main == 'Chango' then
state.CombatWeapon:set('Chango')
elseif player.equipment.main == 'Reikiko' then
state.CombatWeapon:set('Reikiko')
elseif player.equipment.main == 'Tanmogayi +1' then
state.CombatWeapon:set('Tanmogayi')
elseif player.equipment.main == 'Loxotic Mace +1' then
state.CombatWeapon:set('Loxotic')
else
--Neither Rag nor Montante equipped, use sets.engaged
state.CombatWeapon:reset()
end
end
function job_state_change(stateField, newValue, oldValue)
--nothing added in here
end
function update_melee_groups()
classes.CustomMeleeGroups:clear()
-- mythic AM
if player.equipment.main == 'Liberator' then
if buffactive['Aftermath: Lv.3'] then
classes.CustomMeleeGroups:append('AM3')
end
elseif buffactive['Aftermath'] then
classes.CustomMeleeGroups:append('AM')
end
if buffactive['Samurai Roll'] then
classes.CustomRangedGroups:append('SamRoll')
end
end
--------------------------------------------------
-- Creating a custom spellMap, --
-- since Mote capitalized absorbs incorrectly --
--------------------------------------------------
function job_get_spell_map(spell, default_spell_map)
if spell.skill == 'Dark Magic' and absorbs:contains(spell.english) then
return 'Absorb'
end
end
----------------------
-- Precast section --
----------------------
function job_post_precast(spell, action, spellMap, eventArgs)
if spell.type == 'WeaponSkill' then
if buffactive['Mighty Strikes'] then
if sets.precast.WS[spell] then
equip(sets.MS_WS)
end
end
end
if spell.action_type=="Magic" and buffactive.Silence then
eventArgs.cancel = true
send_command('input /item "Echo Drops" <me>')
end
if spell.type=='WeaponSkill' then
if moonshade_WS:contains(spell.english) and player.tp < 2900 then
equip({left_ear="Moonshade Earring"})
end
end
if spell.type == 'WeaponSkill' then
if state.Buff['Souleater'] then
equip(sets.buff.Souleater)
end
end
if spell.type == 'WeaponSkill' then
if spell.target.distance > 8 then
cancel_spell()
add_to_chat(8, 'Target to far away. Move closer')
return
end
end
end
----------------------
-- Midcast Section --
----------------------
function job_post_midcast(spell, action, spellMap, eventArgs)
if spell.skill == 'Elemental Magic' then
if spell.element == world.day_element or spell.element == world.weather_element then
equip(sets.midcast['Elemental Magic'], {waist="Hachirin-no-Obi"})
end
end
--[[ if S{"Tachi: Jinpu","Tachi: Fudo","Catastrophe","Scourge","Cross Reaper"}:contains(spell.english) and (spell.element==world.day_element or spell.element==world.weather_element) then
equip({head="Gavialis Helm"})
end--]]
if S{"Drain","Drain II","Drain III", "Aspir", "Aspir II", "Aspir III"}:contains(spell.english) and (spell.element==world.day_element or spell.element==world.weather_element) then
equip({waist="Hachirin-no-obi"})
end
--[[ equip(sets.MAXDrain)
add_to_chat(100,'WARNING: Misanthropy is now equiped ** Manually Swap weapons ***')
end--]]
if buffactive['Dark Seal'] and S{"Drain III"}:contains(spell.english)then
equip({head="Fallen's Burgeonet +1"})
end
if buffactive['Dark Seal'] and S{"Absorb-STR"}:contains(spell.english)then
equip({head="Fallen's Burgeonet +1"})
end
if buffactive['Dark Seal'] and S{"Absorb-VIT"}:contains(spell.english)then
equip({head="Fallen's Burgeonet +1"})
end
end
------------------------------------------------------------------
-- Called when a player gains or loses a buff. --
-- buff == buff gained or lost --
-- gain == true if the buff was gained, false if it was lost. --
------------------------------------------------------------------
function job_buff_change(buff, gain)
if state.Buff[buff] ~= nil then
state.Buff[buff] = gain
handle_equipping_gear(player.status)
end
if buff:lower()=='terror' or buff:lower()=='petrification' or buff:lower()=='sleep' or buff:lower()=='stun' then
if gain then
equip(sets.defense.PDT)
add_to_chat(8, 'PDT set is equiped')
elseif not gain then
handle_equipping_gear(player.status)
end
end
if buff:lower()=='sleep' then
if gain and player.hp > 120 and player.status == "Engaged" then -- Equip Berserker's Torque / frenzy When You Are Asleep
equip({neck="Berserker's Torque"})
elseif not gain then -- Take Berserker's off
handle_equipping_gear(player.status)
end
end
if buffactive['Reive Mark'] then
equip(sets.Reive)
disable('neck')
else
enable('neck')
end
if buffactive['Souleater'] then
equip({head="Ig. Burgonet +3"})
disable('Head')
add_to_chat(100,'WARNING: Souleater set equiped.')
else
enable('Head')
end
if buffactive['Blood Weapon'] and buffactive['Souleater'] and player.hp > 8000 then
equip({main="Dacnomania", head="Ig. Burgonet +3"})
disable('Head')
--add_to_chat(100,'WARNING: SOUL EATER HEAD ON AND &&&& Dacnomania.')
else
enable('Head')
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')
else
enable('ring1','ring2','waist')
handle_equipping_gear(player.status)
end
end
--[[ Checks if Last resort is active if so cancels Hasso, will put
hasso back on after Last Resort falls off. ]]
if buff == "Last Resort" and player.status == 'Engaged' then
if gain then
send_command('@wait 1.0;cancel hasso')
elseif not midaction() then
send_command('@wait 1.0;input /ja "Hasso" <me>')
end
end
--[[ Drain II HP Boost. Set SE to stay on. ]]
if buff == "Max HP Boost" and state.SouleaterMode.value then
if gain or buffactive['Max HP Boost'] then
state.SouleaterMode:set(false)
else
state.SouleaterMode:set(true)
end
end
--[[ Make sure SE stays on for BW ]]
if buff == 'Blood Weapon' and state.SouleaterMode.value then
if gain or buffactive['Blood Weapon'] then
state.SouleaterMode:set(false)
else
state.SouleaterMode:set(true)
end
end
--[[ AM custom groups ]]
--[[ if buff:startswith('Aftermath') then
if player.equipment.main == 'Liberator' then
classes.CustomMeleeGroups:clear()
if (buff == "Aftermath: Lv.3" and gain) or buffactive['Aftermath: Lv.3'] then
classes.CustomMeleeGroups:append('AM3')
add_to_chat(8, '-------------AM3 UP-------------')
end
if not midaction() then
handle_equipping_gear(player.status)
end
else
classes.CustomMeleeGroups:clear()
if player.equipment.main == "Masamune" then
if buff == "Aftermath" and gain or buffactive.Aftermath then
classes.CustomMeleeGroups:append('AM')
add_to_chat(8, '--Masamune haste is active. Switching to AM set--')
end
end
if player.equipment.main == 'Amanomurakumo' then
if buff == 'Aftermath' and gain then
add_to_chat(8, '---Amanomurakumo AM active providing Crit---')
end
end
if not midaction() then
handle_equipping_gear(player.status)
end
end
end--]]
end
----------------------------------
-- Sub job section for Ninja --
----------------------------------
ninjaTools = {
Utsusemi = S{"Shihei",},--"Shikanofuda"
Hojo = S{"Kaginawa",},--"Chonofuda"
Migawari = S{"Mokujin",},
Kakka = S{"Ryuno",},
Tonko = S{"Shinobi-tabi",},
Kurayami = S{"Sairui-Ran",},
Raiton = S{"Hiraishin",},
Hyoton = S{"Tsurara",},
Monomi = S{"Sanjaku-Tenugui",},
}
function job_precast(spell, action, spellMap, eventArgs)
if spell.type=="Ninjutsu" then check_tools(spell) end
end
function check_tools(spell)
for prefix,tools in pairs(ninjaTools) do
if spell.english:startswith(prefix) then
for tool in tools:it() do
if not player.inventory[tool] then
add_to_chat(100,'WARNING: You are out of '..tool..'.')
elseif player.inventory[tool].count < 10 then
add_to_chat(100,'WARNING: You are low on '..tool..'. '..player.inventory[tool].count..' remaining.')
end
end
end
end
end
--------------------------------------------------------------
-- Rune Fencer Sub Job section for displaying rune info --
--------------------------------------------------------------
function define_rune_info()
rune_info = {
["Ignis"] = {damage="Fire", resistance="Ice"},
["Gelus"] = {damage="Ice", resistance="Wind"},
["Flabra"] = {damage="Wind", resistance="Earth"},
["Tellus"] = {damage="Earth", resistance="Lightning"},
["Sulpor"] = {damage="Lightning", resistance="Water"},
["Unda"] = {damage="Water", resistance="Fire"},
["Lux"] = {damage="Light", resistance="Darkness"},
["Tenebrae"]= {damage="Darkness", resistance="Light"},
}
end
function display_rune_info(spell)
runeinfo = rune_info[spell.english]
if runeinfo then
add_to_chat(122, '*'..spell.english..' is '..runeinfo.damage..'-based dmg. and '..runeinfo.resistance..' resistance*')
end
end
function job_self_command(cmdParams, eventArgs)
if cmdParams[1]:lower() == 'rune' then
send_command('@input /ja '..state.Runes.value..' <me>')
end
end
------------------------------------------------------------------
-- Selecting and Setting the default Macro book and Lock style --
------------------------------------------------------------------
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'DRK' then
set_macro_page(1, 2)
elseif player.sub_job == 'SAM' then
set_macro_page(1, 2)
elseif player.sub_job == 'RUN' --[[and player.equipment.main == '['Dojikiri Yasutsuna']'--]] then
set_macro_page(1, 2)
elseif player.sub_job == 'THF' then
set_macro_page(1, 2)
else
set_macro_page(1, 2)
end
end
function set_lockstyle()
send_command('wait 6;input /lockstyleset 060')
end
You may have better luck phrasing that WS bit as spell.type:lower() == 'weaponskill'
Asura.Diggs
サーバ: Asura
Game: FFXI
Posts: 98
By Asura.Diggs 2019-01-22 04:20:12
Code windower.register_event('mpp change',function()
if player.mpp <= 10 then
send_command('wait .5;input /ja Convert <me>')
end
end)
It has to know when to trigger, so this function will run a check any time your MP percentage changes.
There is a possibility your wait may need to be 1 second due to GCD.
Aah of course, makes totally sense when reading your explanation. Thanks a ton Byrne!
サーバ: Shiva
Game: FFXI
Posts: 1052
By Shiva.Arislan 2019-01-22 09:08:53
Aah of course, makes totally sense when reading your explanation. Thanks a ton Byrne!
Might be a good idea to throw an HP check in there too. :)
[+]
サーバ: Sylph
Game: FFXI
Posts: 116
By Sylph.Ticktick 2019-01-26 17:20:58
has anyone fixed refine_waltz so it will upgrade or downgrade depending on the target's missing hp and what is off cooldown? also divine waltz II -> I when on CD.
Carbuncle.Kigensuro
サーバ: Carbuncle
Game: FFXI
Posts: 93
By Carbuncle.Kigensuro 2019-01-26 21:46:14
has anyone fixed refine_waltz so it will upgrade or downgrade depending on the target's missing hp and what is off cooldown? also divine waltz II -> I when on CD.
this is my waltz and samba auto adjust code
--tho it will only fully work in my include Code --Dancer Waltz Potency Claculator
DNC = {}
function DNC.set_drain_samba() -- returns the highest lvl Drain Samba you can use
local abilitys = gearswap.res.job_abilities
local dnc_type
if player.main_job == "DNC" then
dnc_type = 'main_job'
elseif player.sub_job == "DNC" then
dnc_type = 'sub_job'
end
if player.tp >= 400 and player[dnc_type..'_level'] >= 65 then
return abilitys[186][gearswap.language]
elseif player.tp >= 250 and player[dnc_type..'_level'] >= 35 then
return abilitys[185][gearswap.language]
elseif player.tp >= 100 and player[dnc_type..'_level'] >= 5 then
return abilitys[184][gearswap.language]
end
end
function DNC.waltz_potency(s)
local potency = 100
local tpreduction = 0
local received_pot = 100
local waltz_pot = {["Sonia's Plectrum"]=(allied_tags and 10 or 1),["ソニアプレクトラム"]=(allied_tags and 10 or 1),["Dnc. Casaque +1"]=10,["DRカザク+1"]=10,
["Dancer's Casaque"]=10,["ダンサーカザク"]=10,["Roundel Earring"]=5,["ラウンデルピアス"]=5,["Etoile Tiara"]=5,["エトワールティアラ"]=5,
["Etoile Tiara +1"]=5,["ETティアラ+1"]=5,["Etoile Tiara +2"]=7,["ETティアラ+2"]=7,["Phurba"]=10,["フルバー"]=10,["Valseur's Ring"]=3,["ヴァルスールリング"]=3,
["Kheper Bonnet"]=5,["ケペルボンネット"]=5,["Khepri Bonnet"]=8,["ケプリボンネット"]=8,["Toetapper Mantle"]=5,["トータッパーマント"]=5,
["Asklepian Ring"]=3,["アスクレピアリング"]=3,["Maxixi Casaque"]=20,["マシシカザク"]=20,["Maxixi Casaque +1"]=21,["MXカザク+1"]=21,
["Maxixi Shoes"]=10,["マシシトーシュー"]=10,["Maxixi Shoes +1"]=10,["MXトーシュー+1"]=10,["Blitto Needle"]=3,["ブリットニードル"]=3,
["Slither Gloves +1"]=5,["スリザーグローブ+1"]=5,["Horos Tiara"]=9,["ホロスティアラ"]=9,["Horos Tiara +1"]=11,["HOティアラ+1"]=11,
["Rhadamanthus"]=7,["ラダマントゥス"]=7,}
local waltz_received_pot = {["Maxixi Casaque"]=5,["マシシカザク"]=5,["Maxixi Casaque +1"]=6,["MXカザク+1"]=6,["Asklepian Ring"]=3,["アスクレピアリング"]=3,}
for _,v2 in pairs(s) do
if type(v2) == "table" then
potency = potency + (waltz_pot[v2.name] or 0) received_pot = received_pot + (waltz_received_pot[v2.name] or 0)
for _,v in ipairs(v2.augments) do
potency = potency + tonumber(v:startswith('"Waltz" potency') and string.match(v, '%d+') or '0')
tpreduction = tpreduction + tonumber(v:startswith('"Waltz" TP cost') and string.match(v, '%d+') or '0')
end
else
potency = potency + (waltz_pot[v2] or 0) received_pot = received_pot + (waltz_received_pot[v2] or 0)
end
end
if potency > 130 then
potency = 130
end
return s,potency,received_pot,tpreduction
end
function DNC.select_waltz(bpotency,received_pot,tpreduction) -- returns the most usable Waltz for use on your player
local potency = (bpotency + (player.main_job == "DNC" and (player.job_points.dnc.waltz_potency*2) or 0) + Contradance_potency)
local hp_dif = (player.max_hp - player.hp)
local abilitys = gearswap.res.job_abilities
local base = player.vit + player.chr
local dnc_type
local h_waltz
local h_hp
if hp_dif == 0 then
return nil,0
end
local waltz = {main_job={[1]=0.250,[2]=0.500,[3]=0.750,[4]=1.000,[5]=1.25,},
sub_job={[1]=0.125,[2]=0.250,[3]=0.375,},
default={[1]={c=60,tp=200,lvl=15,id=190},[2]={c=130,tp=350,lvl=30,id=191},[3]={c=270,tp=500,lvl=45,id=192},[4]={c=450,tp=650,lvl=75,id=193},
[5]={c=600,tp=800,lvl=80,id=311},},}
if player.main_job == "DNC" then
dnc_type = 'main_job'
elseif player.sub_job == "DNC" then
dnc_type = 'sub_job'
end
for i,v in ipairs(waltz.default) do
if player[dnc_type..'_level'] >= v.lvl then
local hHP=math.floor((((base*waltz[dnc_type][i])+v.c)*(potency/100))*(received_pot/100))
local hTP=(v.tp-tpreduction)
if hHP >= hp_dif and player.tp >= hTP then
return abilitys[v.id][gearswap.language],hp_dif
elseif player.tp >= hTP then
h_waltz = v.id
h_hp = hHP
end
end
end
if h_waltz then
return abilitys[h_waltz][gearswap.language],h_hp
end
end
--my code that needs to be added to buffchange to make this work
-- function buff_change(name,gain,buff_table)
-- if buff_table.id == 582 then
-- Contradance_potency = (gain and 100 or 0)
-- elseif buff_table.id == 267 then
-- allied_tags = (gain and true or false)
-- end
-- end
--my code used to get the correct healing of waltz (self only)[precast]
-- if spell.type == 'Waltz' then
-- if spell.target.type == "SELF" and spell.en:startswith('Curing Waltz') then
-- local set,potency,received_pot,tpreduction = DNC.waltz_potency(sets["Waltz"])
-- local new_waltz,h_total = DNC.select_waltz(potency,received_pot,tpreduction)
-- if new_waltz and spell.name ~= new_waltz then
-- send_command('input /ja "'..new_waltz..'" <me>')
-- add_to_chat(8, 'Waltz Set To '..new_waltz)
-- elseif h_total == 0 then
-- add_to_chat(8, 'Canceling '..spell.name..' HP Loss At 0')
-- end
-- end
--my code used to get the the best samba[precast]
-- if spell.type == "Samba" and spell.en:startswith('Drain Samba') then
-- local new_Samba = (DNC.set_drain_samba() or false)
-- if new_Samba and spell.en ~= new_Samba then
-- send_command('input /ja "'..new_Samba..'" <me>')
-- end
-- end
divine waltz is to hard to code for and it is impossible to calculate what other targets have for potency on their gear to get the correct hp value
so it cant be done
this is why you can only do the calculations when its target is you
サーバ: Asura
Game: FFXI
Posts: 415
By Asura.Cambion 2019-01-29 22:53:34
has anyone fixed refine_waltz so it will upgrade or downgrade depending on the target's missing hp and what is off cooldown? also divine waltz II -> I when on CD.
I've been using this, courtesy of SimonSes and I haven't run into any conflicts yet. Code function refine_waltz(spell, action, spellMap, eventArgs)
if spell.type ~= 'Waltz' then
return
end
-- Don't modify anything for Healing Waltz or Divine Waltzes
if spell.english == "Healing Waltz" or spell.english == "Divine Waltz" or spell.english == "Divine Waltz II" then
return
end
local newWaltz = spell.english
local waltzID
local spell_recasts = windower.ffxi.get_spell_recasts()
--if spell.english == "Divine Waltz" or spell.english == "Divine Waltz II" then
-- if spell_recasts[spell.recast_id] < 1 and player.tp > 400 then
-- return
-- else if spell_recasts[spell.recast_id] < 1 and player.tp > 400 then
--end
local missingHP
-- If curing ourself, get our exact missing HP
if spell.target.type == "SELF" then
missingHP = player.max_hp - player.hp
-- If curing someone in our alliance, we can estimate their missing HP
elseif spell.target.isallymember then
local target = find_player_in_alliance(spell.target.name)
local est_max_hp = target.hp / (target.hpp/100)
missingHP = math.floor(est_max_hp - target.hp)
end
-- If we have an estimated missing HP value, we can adjust the preferred tier used.
if missingHP ~= nil then
if player.main_job == 'DNC' then
if missingHP < 40 and spell.target.name == player.name then
-- Not worth curing yourself for so little.
-- Don't block when curing others to allow for waking them up.
add_to_chat(122,'Full HP!')
eventArgs.cancel = true
return
elseif missingHP < 200 then
if spell_recasts[190] < 1 and player.tp > 200 then
newWaltz = 'Curing Waltz'
waltzID = 190
elseif spell_recasts[191] < 1 and player.tp > 350 then
newWaltz = 'Curing Waltz II'
waltzID = 191
elseif spell_recasts[192] < 1 and player.tp > 500 then
newWaltz = 'Curing Waltz III'
waltzID = 192
elseif spell_recasts[193] < 1 and player.tp > 650 then
newWaltz = 'Curing Waltz IV'
waltzID = 193
end
elseif missingHP < 600 then
if spell_recasts[191] < 1 and player.tp > 350 then
newWaltz = 'Curing Waltz II'
waltzID = 191
elseif spell_recasts[192] < 1 and player.tp > 500 then
newWaltz = 'Curing Waltz III'
waltzID = 192
elseif spell_recasts[193] < 1 and player.tp > 650 then
newWaltz = 'Curing Waltz IV'
waltzID = 193
elseif spell_recasts[190] < 1 and player.tp > 200 then
newWaltz = 'Curing Waltz'
waltzID = 190
end
elseif missingHP < 1100 then
if spell_recasts[192] < 1 and player.tp > 500 then
newWaltz = 'Curing Waltz III'
waltzID = 192
elseif spell_recasts[193] < 1 and player.tp > 650 then
newWaltz = 'Curing Waltz IV'
waltzID = 193
elseif spell_recasts[194] < 1 and player.tp > 800 then
newWaltz = 'Curing Waltz V'
waltzID = 194
elseif spell_recasts[191] < 1 and player.tp > 350 then
newWaltz = 'Curing Waltz II'
waltzID = 191
elseif spell_recasts[190] < 1 and player.tp > 200 then
newWaltz = 'Curing Waltz'
waltzID = 190
end
elseif missingHP < 1500 then
if spell_recasts[193] < 1 and player.tp > 650 then
newWaltz = 'Curing Waltz IV'
waltzID = 193
elseif spell_recasts[192] < 1 and player.tp > 500 then
newWaltz = 'Curing Waltz III'
waltzID = 192
elseif spell_recasts[194] < 1 and player.tp > 800 then
newWaltz = 'Curing Waltz V'
waltzID = 194
elseif spell_recasts[191] < 1 and player.tp > 350 then
newWaltz = 'Curing Waltz II'
waltzID = 191
elseif spell_recasts[190] < 1 and player.tp > 200 then
newWaltz = 'Curing Waltz'
waltzID = 190
end
else
if spell_recasts[194] < 1 and player.tp > 800 then
newWaltz = 'Curing Waltz V'
waltzID = 194
elseif spell_recasts[193] < 1 and player.tp > 650 then
newWaltz = 'Curing Waltz IV'
waltzID = 193
elseif spell_recasts[192] < 1 and player.tp > 500 then
newWaltz = 'Curing Waltz III'
waltzID = 192
elseif spell_recasts[191] < 1 and player.tp > 350 then
newWaltz = 'Curing Waltz II'
waltzID = 191
elseif spell_recasts[190] < 1 and player.tp > 200 then
newWaltz = 'Curing Waltz'
waltzID = 190
end
end
elseif player.sub_job == 'DNC' then
if missingHP < 40 and spell.target.name == player.name then
-- Not worth curing yourself for so little.
-- Don't block when curing others to allow for waking them up.
add_to_chat(122,'Full HP!')
eventArgs.cancel = true
return
elseif missingHP < 150 then
newWaltz = 'Curing Waltz'
waltzID = 190
elseif missingHP < 300 then
newWaltz = 'Curing Waltz II'
waltzID = 191
else
newWaltz = 'Curing Waltz III'
waltzID = 192
end
else
-- Not dnc main or sub; bail out
return
end
end
local tpCost = waltz_tp_cost[newWaltz]
local downgrade
-- Downgrade the spell to what we can afford
--if player.tp < tpCost and not buffactive.trance then
--[[ Costs:
Curing Waltz: 200 TP
Curing Waltz II: 350 TP
Curing Waltz III: 500 TP
Curing Waltz IV: 650 TP
Curing Waltz V: 800 TP
Divine Waltz: 400 TP
Divine Waltz II: 800 TP
--]]
-- if player.tp < 200 then
-- add_to_chat(122, 'Insufficient TP ['..tostring(player.tp)..']. Cancelling.')
-- eventArgs.cancel = true
-- return
-- elseif player.tp < 350 then
-- newWaltz = 'Curing Waltz'
-- elseif player.tp < 500 then
-- newWaltz = 'Curing Waltz II'
-- elseif player.tp < 650 then
-- newWaltz = 'Curing Waltz III'
-- elseif player.tp < 800 then
-- newWaltz = 'Curing Waltz IV'
-- end
--
-- downgrade = 'Insufficient TP ['..tostring(player.tp)..']. Downgrading to '..newWaltz..'.'
--end
if newWaltz ~= spell.english then
send_command('@input /ja "'..newWaltz..'" '..tostring(spell.target.raw))
--if downgrade then
-- add_to_chat(122, downgrade)
--end
eventArgs.cancel = true
return
end
if missingHP and missingHP > 0 then
add_to_chat(122,'Trying to cure '..tostring(missingHP)..' HP using '..newWaltz..'.')
end
end
I have not been able to figure out the Divine Waltz downgrade yet, but I'm trying.
I was told Divine Waltz ID is 195 and Divine Waltz II is 262 if that helps anyone. I don't personally care about the missing HP calculation, I simply want the automatic up/downgrade if the one I try to use is on Cooldown, that's all.
I know it should look something like this, but haven't figured it out yet. Code if spell_recasts[spell.recast_id] > 0 then
if spell.english == 'Divine Waltz' then
add_to_chat(122,'All Divine Waltz on cooldown, cancelling Waltz.')
eventArgs.cancel = true
return
elseif spell.english == 'Divine Waltz II' then
newDivine = 'Divine Waltz'
waltzID = 195
end
end
if newDivine ~= spell.english then
send_command('@input /ja "'..newDivine..'" '..tostring(spell.target.raw))
eventArgs.cancel = true
return
end
If I use Divine Waltz 2, and cooldown is > 0 then use Divine Waltz 1. That's it. I don't know why I can't figure out the proper code for it. :(
Tomorrow Test: Code local newWaltz = spell.english
local waltzID
local spell_recasts = windower.ffxi.get_spell_recasts()
if spell.english == "Divine Waltz" or spell.english == "Divine Waltz II" then
if spell_recasts[spell.recast_id] < 1 and player.tp > 800 then
newWaltz = 'Divine Waltz II'
waltzID = 262
return
else if spell_recasts[spell.recast_id] > 1 and player.tp > 400 then
newWaltz = 'Divine Waltz'
waltzID = 195
end
Bahamut.Yukisoba
サーバ: Bahamut
Game: FFXI
Posts: 58
By Bahamut.Yukisoba 2019-01-31 18:08:57
Greetings,
I've just begun trying to use gearswap commands with the send addon, and I'm having trouble getting them to work.
For example, I wanted a gearswap command to create a SCH skillchain. When I try to execute the command in the game(I typed //gs c distortion) the gearswap debug mode tells me Entering self_command, and then nothing happens after that. Is there a bit of code I'm missing that I need? My function looks like this
function self_command(command)
if command == 'distortion' then
send_command('input /ja "immanence" <me>; wait 1; input /ma "luminohelix" <bt>; wait 5; input /ja "immanence" <me>; wait 1; input /ma "stone" <bt>; wait 4; input /ma "cryohelix II" <bt>')
end
end
I use Mote's includes type of gearswap files, and have been battling with this all afternoon, I'm just at a loss what to do to get these working. Any help appreciated!
EDIT: got it working, disregard this post, sorry!
Asura.Conor
サーバ: Asura
Game: FFXI
Posts: 12
By Asura.Conor 2019-02-05 08:28:26
Good morning everyone. I've been on here once before in search of an answer, however am still stuck on this problem.
I know very little about gearswap, so I mainly stick to just exporting my gear and copy pasting it within each set.
The problem is that randomly (maybe once per hour)
Gearswap completely blocks any inputs into the game. The only thing I will be able to do at all is simply walk around. Macros and menus will not work, nor will typing a command in. This will last about 60 seconds and there seems to be no exact trigger for it to happen. In fact sometimes it occurs while standing still performing no actions at all. If I unload gearswap, the problem immediately goes away, and if I reload gearswap thr problem will still be there until this 60 second window is up. Once the problem goes away, my character will immediately use the last action that I tried to use, but was blocked.
At first I thought it was the lua (which it may be idk), however it is happening with my pld and rdm. Those are the only 2 jobs I've been playing, but possibly would happen on other jobs as well. I've tried deleting Lua's and redownloading them to carefully plug in my gear, but it hasn't fixed it. I tried deleting gearswap completely and redownlading it as well.
You can imagine the frustration when doing any major fight to have your inputs blocked completely.
The only clue I've found is a text file within gearswap that states that it will block all inputs under certain circumstances. I can't recall the exact wording.
Any help or clues would be greatly appreciated. Thanks!
Bismarck.Xurion
サーバ: Bismarck
Game: FFXI
Posts: 694
By Bismarck.Xurion 2019-02-06 14:15:15
[+]
Siren.Silpha
サーバ: Siren
Game: FFXI
Posts: 1
By Siren.Silpha 2019-02-10 15:52:53
Hello.
I don't understand the difference between combatform and meleegroup. As so, i can't have both my Footwork set and Impetus set working at the same time. Combatform always seems to take precedence.
I tried to "cheat" footwork into being a meleegroup but it caused even more problems lol. 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')
include('Silpha-Globals.lua')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.Buff.Footwork = buffactive.Footwork or false
state.Buff.Impetus = buffactive.Impetus or false
state.FootworkWS = M(false, 'Footwork on WS')
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', 'Counter')
state.PhysicalDefenseMode:options('PDT')
state.MagicalDefenseMode:options('MDT')
update_combat_form()
update_melee_groups()
select_default_macro_book()
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Start defining the sets
--------------------------------------
-- Precast Sets
-- Precast sets to enhance JAs on use
sets.precast.JA['Hundred Fists'] = {legs="Hesychast's hose +3"}
sets.precast.JA['Boost'] = {hands="Anchorite's gloves +3"}
sets.precast.JA['Dodge'] = {feet="Anchorite's gaiters +3"}
sets.precast.JA['Focus'] = {head="Anchorite's Crown +2"}
sets.precast.JA['Counterstance'] = {feet="Hesychast's Gaiters +3"}
sets.precast.JA['Footwork'] = {feet="Bhikku Gaiters +1"}
sets.precast.JA['Formless Strikes'] = {body="Hesychast's Cyclas +3"}
sets.precast.JA['Mantra'] = {feet="Hesychast's Gaiters +3"}
sets.precast.JA['Perfect Counter'] = {head="Tantra Crown +2"}
sets.precast.JA['Chi Blast'] = {head="Hesychast's Crown +3"}
sets.precast.JA['Chakra'] = {
ammo="Iron Gobbet",
head="Hesychast's Crown +3",
neck="Tjukurrpa Medal",
ear1="Thureous Earring",
ear2="Odnowa Earring +1",
body="Anchorite's Cyclas +3",
hands="Hesychast's Gloves +3",
ring1="Petrov Ring",
ring2="Meridian Ring",
back=SegomoVIT,
waist="Latria Sash",
legs="Hizamaru Hizayoroi +2",
feet="Kendatsuba Sune-ate +1"}
-- Waltz set (chr and vit)
sets.precast.Waltz = {
ammo="Iron Gobbet",
head="Mummu bonnet +2",
neck="Tjukurrpa Medal",
ear1="Thureous Earring",
ear2="Odnowa Earring +1",
body="Hesychast's Cyclas +3",
hands="Hesychast's gloves +3",
ring1="Mummu Ring",
ring2="Moepapa Annulet",
back=SegomoVIT,
waist="Latria Sash",
legs="Desultor Tassets",
feet="Hesychast's Gaiters +3"}
-- Don't need any special gear for Healing Waltz.
sets.precast.Waltz['Healing Waltz'] = {
legs="Desultor Tassets"}
sets.precast.Step = {
head="White Rarab Cap +1",
waist="Chaac Belt"}
sets.precast.Flourish1 = {
head="White Rarab Cap +1",
waist="Chaac Belt"}
-- Fast cast sets for spells
sets.precast.FC = {
ammo="Sapience Orb",
head=Herculean_MAB_Head,
neck="Baetyl Pendant",
ear1="Loquacious Earring",
body="Samnuha Coat",
hands="Leyline gloves",
ring1="Prolix Ring"}
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
sets.precast.FC.Enhancing = set_combine(sets.precast.FC, {waist="Siegel Sash"})
-- Weaponskill sets
sets.precast.WS["Final Heaven"] = {
ammo="Knobkierrie",
head="Hesychast's Crown +3",
neck="Tjukurrpa Medal",
ear1="Ishvara Earring",
ear2="Odnowa Earring +1",
body="Hesychast's Cyclas +3",
hands="Anchorite's gloves +3",
ring1="Epona's Ring",
ring2="Petrov Ring",
back=SegomoVIT,
waist="Moonbow Belt +1",
legs="Hizamaru Hizayoroi +2",
feet="Kendatsuba Sune-ate +1"}
sets.precast.WS["Victory Smite"] ={
ammo="Tantra Tathlum",
head=Adhemar_B_head,
neck="Caro Necklace",
ear1="Moonshade Earring",
ear2="Sherida Earring",
body="Anchorite's Cyclas +3",
hands=Ryuo_A_hands,
ring1="Begrudging Ring",
ring2="Mummu Ring",
back=SegomoWS,
waist="Moonbow Belt +1",
legs="Hizamaru Hizayoroi +2",
feet="Kendatsuba Sune-Ate +1"}
sets.precast.WS["Victory Smite"].FullTP = set_combine(sets.precast.WS["Victory Smite"], {ear2="Odnowa Earring +1"})
sets.precast.WS["Ascetic's Fury"] = {
ammo="Knobkierrie",
head=Adhemar_B_head,
neck="Fotia Gorget",
ear1="Ishvara Earring",
ear2="Moonshade Earring",
body="Anchorite's Cyclas +3",
hands=Ryuo_A_hands,
ring1="Begrudging Ring",
ring2="Mummu Ring",
back=SegomoWS,
waist="Moonbow Belt +1",
legs="Hizamaru Hizayoroi +2",
feet="Kendatsuba Sune-ate +1"}
sets.precast.WS["Ascetic's Fury"].FullTP = set_combine(sets.precast.WS["Ascetic's Fury"], {ear2="Sherida Earring"})
sets.precast.WS["Raging Fists"] = {
ammo="Knobkierrie",
head="Hesychast's Crown +3",
neck="Caro Necklace",
ear1="Ishvara Earring",
ear2="Moonshade Earring",
body=Adhemar_B_body,
hands="Anchorite's gloves +3",
ring1="Rajas Ring",
ring2="Ilabrat Ring",
back=SegomoVIT,
waist="Moonbow Belt +1",
legs="Hizamaru Hizayoroi +2",
feet="Kendatsuba Sune-Ate +1"}
sets.precast.WS["Raging Fists"].FullTP = set_combine(sets.precast.WS["Raging Fists"], {ear2="Sherida Earring"})
sets.precast.WS["Howling Fist"] = {
ammo="Tantra Tathlum",
head="Hesychast's Crown +3",
neck="Tjukurrpa Medal",
ear1="Ishvara Earring",
ear2="Moonshade Earring",
body="Hesychast's Cyclas +3",
hands="Anchorite's gloves +3",
ring1="Epona's Ring",
ring2="Petrov Ring",
back=SegomoVIT,
waist="Moonbow Belt +1",
legs="Hizamaru Hizayoroi +2",
feet="Kendatsuba Sune-Ate +1"}
sets.precast.WS["Howling Fist"].FullTP = set_combine(sets.precast.WS["Howling Fist"], {ear2="Sherida Earring"})
sets.precast.WS["Asuran Fists"] = {
ammo="Knobkierrie",
head="Hesychast's Crown +3",
neck="Fotia Gorget",
ear1="Assuage Earring",
ear2="Sherida Earring",
body="Hesychast's Cyclas +3",
hands="Hesychast's Gloves +3",
ring1="Begrudging Ring",
ring2="Ilabrat Ring",
back=SegomoWS,
waist="Moonbow Belt +1",
legs="Hesychast's Hose +3",
feet="Hesychast's Gaiters +3"}
sets.precast.WS["Dragon Kick"] ={
ammo="Knobkierrie",
head="Hesychast's Crown +3",
neck="Monk's Nodowa +2",
ear1="Ishvara Earring",
ear2="Moonshade Earring",
body="Kendatsuba Samue +1",
hands="Anchorite's gloves +3",
ring1="Epona's Ring",
ring2="Rajas Ring",
back=SegomoVIT,
waist="Moonbow Belt +1",
legs="Hizamaru Hizayoroi +2",
feet="Anchorite's gaiters +3"}
sets.precast.WS["Dragon Kick"].FullTP = set_combine(sets.precast.WS["Dragon Kick"], {ear2="Sherida Earring"})
sets.precast.WS["Tornado Kick"] ={
ammo="Knobkierrie",
head="Hesychast's Crown +3",
neck="Monk's Nodowa +2",
ear1="Ishvara Earring",
ear2="Moonshade Earring",
body="Kendatsuba Samue +1",
hands="Anchorite's gloves +3",
ring1="Epona's Ring",
ring2="Rajas Ring",
back=SegomoVIT,
waist="Moonbow Belt +1",
legs="Hizamaru Hizayoroi +2",
feet="Anchorite's gaiters +3"}
sets.precast.WS["Tornado Kick"].FullTP = set_combine(sets.precast.WS["Tornado Kick"], {ear2="Sherida Earring"})
sets.precast.WS["Spinning Attack"] = {
ammo="Knobkierrie",
head="Hesychast's Crown +3",
neck="Fotia Gorget",
ear1="Ishvara Earring",
ear2="Moonshade Earring",
body=Adhemar_B_body,
hands="Anchorite's gloves +3",
ring1="Epona's Ring",
ring2="Rajas ring",
back=SegomoWS,
waist="Moonbow Belt +1",
legs="Hizamaru Hizayoroi +2",
feet="Hesychast's Gaiters +3"}
sets.precast.WS["Spinning Attack"].FullTP = set_combine(sets.precast.WS["Spinning Attack"], {ear2="Sherida Earring"})
sets.precast.WS["Cataclysm"] = {
ammo="Knobkierrie",
head="Pixie Hairpin +1",
neck="Baetyl Pendant",
ear1="Friomisi Earring",
ear2="Hermetic Earring",
body="Samnuha Coat",
hands="Leyline Gloves",
ring1="Arvina Ringlet +1",
ring2="Archon Ring",
back="Laic Mantle",
waist="Eschan Stone",
legs=Herculean_MAB_legs,
feet=Herculean_TP_feet}
sets.precast.WS["Shell Crusher"] = {
ammo="Knobkierrie",
head="Hesychast's Crown +3",
neck="Fotia Gorget",
ear1="Ishvara Earring",
ear2="Sherida Earring",
body="Hizamaru Haramaki +1",
hands="Anchorite's Gloves +3",
ring1="Petrov Ring",
ring2="Rajas Ring",
back=SegomoWS,
waist="Fotia Belt",
legs="Hizamaru Hizayoroi +2",
feet="Hesychast's Gaiters +3"}
-- Midcast Sets
sets.midcast.FastRecast = {
ammo="Sapience Orb",
head=Herculean_MAB_head,
neck="Baetyl Pendant",
ear1="Loquacious Earring",
ear2="MAche Earring +1",
body="Samnuha Coat",
hands="Leyline Gloves",
ring1="Prolix Ring",
ring2="Chirich Ring",
back=SegomoTP,
waist="Moonbow Belt +1",
legs="Anchorite's Hose +2",
feet="Kendatsuba Sune-Ate +1"}
-- Specific spells
sets.midcast.Stoneskin = {
neck="Stone Gorget",
waist="Siegel Sash",
legs="Haven Hose",}
-- Sets to return to when not performing an action.
-- Idle sets
sets.idle = {
ammo="Staunch Tathlum +1",
head="Kendatsuba Jinpachi +1",
neck="Bathy Choker +1",
ear1="Infused Earring",
ear2="Sanative Earring",
body="Hizamaru Haramaki +1",
hands=Rao_A_hands,
ring1="Chirich Ring +1",
ring2="Chirich Ring",
back="Moonlight Cape",
waist="Moonbow Belt +1",
legs="Mummu Kecks +2",
feet="Hermes' Sandals"}
-- Defense sets
sets.defense.PDT = {
ammo="Staunch Tathlum +1",
head=Herculean_MAB_Head,
neck="Loricate Torque +1",
ear1="Infused Earring",
ear2="Assuage Earring",
body="Hesychast's Cyclas +3",
hands=Herculean_MAB_hands,
ring1="Vocane Ring",
ring2="Defending Ring",
back="Moonlight Cape",
waist="Moonbow Belt +1",
legs="Mummu Kecks +2",
feet=Herculean_TP_feet}
sets.defense.MDT = {
ammo="Staunch Tathlum +1",
head=Herculean_MAB_Head,
neck="Warder's Charm +1",
ear1="Hearty Earring",
ear2="Odnowa Earring +1",
body="Hesychast's Cyclas +3",
hands="Kendatsuba Tekko +1",
ring1="Archon Ring",
ring2="Defending Ring",
back="Moonlight Cape",
waist="Carrier's Sash",
legs="Mummu Kecks +2",
feet="Kendatsuba Sune-Ate +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
-- Normal melee sets
sets.engaged = {
ammo="Ginsen",
head=Adhemar_B_head,
neck="Monk's Nodowa +2",
ear1="Cessance Earring",
ear2="Sherida Earring",
body=Adhemar_B_body,
hands=Adhemar_B_hands,
ring1="Epona's Ring",
ring2="Ilabrat Ring",
back=SegomoTP,
waist="Moonbow Belt +1",
legs="Hesychast's Hose +3",
feet=Herculean_TP_feet}
sets.engaged.Acc = {
ammo="Honed Tathlum",
head="Kendatsuba Jinpachi +1",
neck="Monk's Nodowa +2",
ear1="Assuage Earring",
ear2="Mache Earring +1",
body="Kendatsuba Samue +1",
hands="Kendatsuba Tekko +1",
ring1="Chirich Ring +1",
ring2="Ilabrat Ring",
back=SegomoTP,
waist="Moonbow Belt +1",
legs="Kendatsuba Hakama +1",
feet="Kendatsuba Sune-Ate +1"}
sets.engaged.Counter = {
ammo="Amar Cluster",
head="Kendatsuba Jinpachi +1",
neck="Monk's Nodowa +2",
ear1="Assuage Earring",
ear2="Mache Earring +1",
body="Hesychast's Cyclas +3",
hands=Rao_A_hands,
ring1="Chirich Ring +1",
ring2="Ilabrat Ring",
back=SegomoTP,
waist="Moonbow Belt +1",
legs="Anchorite's Hose +2",
feet="Hesychast's Gaiters +3"}
-- Defensive melee hybrid sets
-- Hundred Fists/Impetus melee set mods
sets.engaged.HF = sets.engaged.Acc
sets.engaged.Impetus = set_combine(sets.engaged, {body="Bhikku Cyclas +1"})
sets.engaged.HF.Impetus = set_combine(sets.engaged.acc, {body="Bhikku Cyclas +1"})
-- Footwork combat form
sets.engaged.Footwork = set_combine(sets.engaged, {legs="Hesychast's hose +3", feet="Anchorite's gaiters +3"})
-- Quick sets for post-precast adjustments, listed here so that the gear can be Validated.
sets.impetus_body = {body="Bhikku Cyclas +1"}
sets.footwork_kick_feet = {feet="Anchorite's gaiters +3"}
sets.Obi = {waist="Hachirin-no-Obi"}
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)
-- Don't gearswap for weaponskills when Defense is on.
if spell.type == 'WeaponSkill' and state.DefenseMode.current ~= 'None' then
eventArgs.handled = true
end
end
-- Run after the general precast() is done.
function job_post_precast(spell, action, spellMap, eventArgs)
if spell.type == 'WeaponSkill' and state.DefenseMode.current ~= 'None' then
if state.Buff.Footwork and (spell.english == "Dragon's Kick" or spell.english == "Tornado Kick") then
equip(sets.footwork_kick_feet)
end
end
if spell.type == 'WeaponSkill' then
if spell.english == "Cataclysm" then
if world.weather_element == 'Dark' or world.day_element == 'Dark' then
equip(sets.Obi)
end
elseif spell.english == "Raging Fists" then
if player.tp == 3000 then
equip(sets.precast.WS["Raging Fists"].FullTP)
end
elseif spell.english == "Howling Fist" then
if player.tp == 3000 then
equip(sets.precast.WS["Howling Fist"].FullTP)
end
elseif spell.english == "Ascetic's Fury" then
if player.tp == 3000 then
equip(sets.precast.WS["Ascetic's Fury"].FullTP)
end
elseif spell.english == "Victory Smite" then
if player.tp == 3000 then
equip(sets.precast.WS["Victory Smite"].FullTP)
end
elseif spell.english == "Dragon Kick" then
if player.tp == 3000 then
equip(sets.precast.WS["Dragon Kick"].FullTP)
end
elseif spell.english == "Tornado Kick" then
if player.tp == 3000 then
equip(sets.precast.WS["Tornado Kick"].FullTP)
end
elseif spell.english == "Spinning Attack" then
if player.tp == 3000 then
equip(sets.precast.WS["Spinning Attack"].FullTP)
end
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
-- Called when a player gains or loses a buff.
-- buff == buff gained or lost
-- gain == true if the buff was gained, false if it was lost.
function job_buff_change(buff, gain)
-- Set Footwork as combat form any time it's active and Hundred Fists is not.
if buff == 'Footwork' and gain or buffactive.footwork then
state.CombatForm:set('Footwork')
else
state.CombatForm:reset()
end
-- Hundred Fists and Impetus modify the custom melee groups
if buff == "Impetus" then
classes.CustomMeleeGroups:clear()
if buff == "Impetus" and gain or buffactive.impetus then
classes.CustomMeleeGroups:append('Impetus')
end
end
--update gear if any of the above changed
if buff == 'Footwork' or buff == 'Impetus' then
handle_equipping_gear(player.status)
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Called by the 'update' self-command.
function job_update(cmdParams, eventArgs)
update_combat_form()
update_melee_groups()
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
function update_combat_form()
if buffactive.footwork then
state.CombatForm:set('Footwork')
else
state.CombatForm:reset()
end
end
function update_melee_groups()
classes.CustomMeleeGroups:clear()
if buffactive.impetus then
classes.CustomMeleeGroups:append('Impetus')
end
end
-------------------------------------------------------------------------------------------------------------------
-- Custom event hooks.
-------------------------------------------------------------------------------------------------------------------
function select_default_macro_book()
set_macro_page(1, 1)
end
-- Keep track of the current hit count while Impetus is up.
Would appreciate being pointed on the right way, or even some lines tweak. thx.
Cerberus.Echohawk
サーバ: Cerberus
Game: FFXI
Posts: 91
By Cerberus.Echohawk 2019-02-11 00:58:07
This is probably more of a Send add-on issue, but it impacts gearswap so here goes.
When I use the send add-on (usually in a macro) to do any command that requires quotes it fails to trigger any gearswap changes. Example macro:
/console send character "/ma 'Fire V' <t>"
This casts the spell without pre/midcast gear swaps. Anything not needing quotes (Resolution, Geo-Frailty, etc) all work just fine via send. Outside of send, all gearswaps work. I'd rather not use vanilla equip sets as a work around. What am I doing wrong?
Here's a list of things that don't work: Removing quotes, rearranging quotes, removing spaces, spelling out /jobability or /magic, correct capilization, and hyphens all either still fail to register the ability/spell or are unable to execute the command at all.
Edit-- found it its /console send player /ma \"Fire V\" <t>
サーバ: Asura
Game: FFXI
Posts: 4
By Asura.Konekoo 2019-02-11 15:05:25
Hey guys. Just had a quick and hopefully easy question. I can't for the life of me figure out why in my DRK lua, the belt won't change to what I have it specified too after I Weaponskill. Both without haste and after my delay haste is capped. So if I do a WS, everything else will revert back to my engaged TP set except the belt. It'll just stick with the fotia or grunfeld rope. Idk if the lua is taking into account the afterglow on the Apoc and thinking its gear haste but it still does it with any other weapon as well. I have a pretty generalized understanding of how Gearswap works so be gentle. I appreciate any help.
Code --[[
=== Features ===
If you want auto Reive detection for Ygnas Resolve+1, and Gavialis Helm for some of your WS, then you will need my User-Globals.lua
Otherwise, you might be able to get away without it. (not tested)
If you don't use organizer, then remove the include('organizer-lib') in get_sets() and remove sets.Organizer
This lua has a few MODES you can toggle with hotkeys or macros, and there's a few situational RULES that activate without hotkeys
::MODES::
SouleaterMode
Status: OFF by default.
Hotkey: Toggle this with @F9 (window key + F9).
Macro: /console gs c togggle SouleaterMode
Notes: This mode makes it possible to use Souleater in situations where you would normally avoid using it. When SouleaterMode
is ON, Souleater will be canceled automatically after the first Weaponskill used. CAVEAT -. If Bloodweapon
is active, or if Drain's HP Boost buff is active, then Souleater will remain active until the next WS used after
either buff wears off.
CapacityMode
Status: OFF by default.
Hotkey: with ALT + =
Macro: /console cs c toggle CapacityMode
Notes: It will full-time whichever piece of gear you specify in sets.CapacityMantle
Extra Info: You can change the default (true|false) status of any MODE by changing their values in job_setup()
::RULES::
Gavialis helm/
Status: enabled
Setting: set use_gavialis = true below in job_setup.
Notes: Gavialis Helm will automatically be used for all weaponskills on their respective days of the week. If you would like to
exclude a weapon skill, you must add it to wsList below. (found in job_setup) You also need my User-Globals.lua for this
to even work.
Ygna's Resolve +1
Status: enabled in Reive
Setting: n/a
Notes: Will automatically be used when you're in a reive. If you have my User-Globals.lua this will work
with all your jobs that use mote's includes. Not just this one!
Moonshade earring
Status: Not used for WS's at 3000 TP.
Setting: n/a
You can hit F12 to display custom MODE status as well as the default stuff.
Single handed weapons are handled in the sets.engaged.SW set. (sword + shield, etc.)
::NOTES::
My sets have a specific order, or they will not function correctly.
sets.engaged.[CombatForm][CombatWeapon][Offense or HybridMode][CustomMeleeGroups or CustomClass]
CombatForm = Haste, DW, SW
CombatWeapon = GreatSword, Scythe, Apocalypse, Ragnarok, Caladbolg, Liberator, Anguta
OffenseMode = Mid, Acc
HybridMode = PDT
CustomMeleeGroups = AM3, AM, Haste
CustomClass = OhShit
CombatForm Haste is used when Last Resort + Hasso AND either Haste, March, Indi-Haste Geo-Haste is on you.
CombatForm DW will activate with /dnc or /nin AND a weapon listed in drk_sub_weapons equipped offhand.
SW is active with an empty sub-slot, or a shield listed in the shields = S{} list.
CombatWeapon GreatSword will activate when you equip a GS listed in gsList in job_setup().
CombatWeapon Scythe will activate when you equip a Scythe listed in scytheList in job_setup().
Weapons that do not fall into these groups, or have sets by weapon name, will use default sets.engaged
most gear sets derrive themselves from sets.engaged, so try to keep it updated. It's much smarter to derrive sets than to
completely re-invent each gear set for every weapon. Let your gear inherit. Less code written means less errors.
CustomMeleeGroups AM3 will activate when Aftermath lvl 3 is up, and CustomMeleeGroups AM will activate when relic Aftermath is up.
There are no empy AM sets for now.
--]]
--
-- Initialization function for this job file.
send_command('input /macro book 11;input /macro set 1;wait 1;input /lockstyleset 11')--Automatically sets lockstyle and macro book/set one time upon loading.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
include('organizer-lib')
end
-- Setup vars that are user-independent.
function job_setup()
state.CapacityMode = M(false, 'Capacity Point Mantle')
include('Mote-TreasureHunter')
state.TreasureMode:set('Tag')
state.Buff.Souleater = buffactive.souleater or false
state.Buff['Last Resort'] = buffactive['Last Resort'] or false
-- Set the default to false if you'd rather SE always stay acitve
state.SouleaterMode = M(false, 'Soul Eater Mode')
-- state.LastResortMode = M(false, 'Last Resort Mode')
-- Use Gavialis helm?
use_gavialis = false
-- Weaponskills you do NOT want Gavialis helm used with (only considered if use_gavialis = true)
wsList = S{'Spiral Hell', 'Torcleaver', 'Insurgency', 'Quietus', 'Cross Reaper'}
-- Greatswords you use.
gsList = S{'Malfeasance', 'Macbain', 'Kaquljaan', 'Mekosuchus Blade', 'Ragnarok', 'Raetic Algol', 'Raetic Algol +1', 'Caladbolg', 'Montante +1', 'Albion' }
scytheList = S{'Raetic Scythe', 'Deathbane', 'Twilight Scythe' }
shields = S{'Rinda Shield'}
-- Mote has capitalization errors in the default Absorb mappings, so we use our own
absorbs = S{'Absorb-STR', 'Absorb-DEX', 'Absorb-VIT', 'Absorb-AGI', 'Absorb-INT', 'Absorb-MND', 'Absorb-CHR', 'Absorb-Attri', 'Absorb-ACC', 'Absorb-TP'}
-- Offhand weapons used to activate DW mode
swordList = S{"Sangarius", "Sangarius +1", "Usonmunku", "Perun +1", "Tanmogayi"}
get_combat_form()
get_combat_weapon()
update_melee_groups()
end
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
-- Options: Override default values
state.OffenseMode:options('Normal', 'Mid', 'Acc')
state.HybridMode:options('Normal', 'PDT')
state.WeaponskillMode:options('Normal', 'Mid', 'Acc')
state.CastingMode:options('Normal', 'Acc')
state.IdleMode:options('Normal')
state.RestingMode:options('Normal')
state.PhysicalDefenseMode:options('PDT', 'Reraise')
state.MagicalDefenseMode:options('MDT')
war_sj = player.sub_job == 'WAR' or false
-- Additional local binds
send_command('bind ^= gs c cycle treasuremode')
send_command('bind != gs c toggle CapacityMode')
send_command('bind @f9 gs c toggle SouleaterMode')
send_command('bind !- gs equip sets.crafting')
--send_command('bind ^` gs c toggle LastResortMode')
select_default_macro_book()
end
-- Called when this job file is unloaded (eg: job change)
function file_unload()
send_command('unbind ^`')
send_command('unbind !=')
send_command('unbind ^[')
send_command('unbind ![')
send_command('unbind @f9')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Start defining the sets
--------------------------------------
-- Augmented gear
Niht = {}
Niht.DarkMagic = {name="Niht Mantle", augments={'Attack+6','Dark magic skill +1','"Drain" and "Aspir" potency +24'}}
Niht.WSD = {name="Niht Mantle", augments={'Attack+14','Dark magic skill +4', '"Drain" and "Aspir" potency +17', 'Weapon skill damage +5%'}}
Ankou = {}
Ankou.FC = { name="Ankou's Mantle", augments={'"Fast Cast"+10',}}
Ankou.STP = { name="Ankou's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Store TP"+10','Damage taken-5%',}}
Ankou.WSD = { name="Ankou's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}}
Ankou.VIT = { name="Ankou's Mantle", augments={'VIT+20','Accuracy+20 Attack+20','VIT+10','Weapon skill damage +10%',}}
sets.TreasureHunter = { waist="Chaac Belt" }
Odyssean = {}
Odyssean.Legs = {}
Odyssean.Legs.TP = { name="Odyssean Cuisses", augments={'"Triple Atk."+2','"Mag.Atk.Bns."+5','Quadruple Attack +1','Accuracy+17 Attack+17',}}
Odyssean.Legs.WS = { name="Odyssean Cuisses", augments={'Accuracy+25','DEX+1','Weapon skill damage +7%','Accuracy+10 Attack+10',}}
Odyssean.Feet = {}
Odyssean.Feet.FC = { name="Odyssean Greaves", augments={'Attack+20','"Fast Cast"+4','Accuracy+15',}}
Odyssean.Feet.TP = { name="Odyssean Greaves", augments={'Accuracy+16 Attack+16','"Store TP"+4','DEX+1','Accuracy+13','Attack+15',}}
sets.Organizer = {
main="Liberator",
sub="Sangarius",
ammo="Caladbolg",
ring1="Apocalypse",
ring2="Loyalist Sabatons",
ear2="Reraise Earring",
neck="Bloodrain Strap",
grip="Pole Grip",
waist="Mes. Haubergeon",
back=Niht.DarkMagic,
}
-- Precast Sets
-- Precast sets to enhance JAs
sets.precast.JA['Diabolic Eye'] = {hands="Fallen's Finger Gauntlets +1"}
sets.precast.JA['Nether Void'] = {legs="Heathen's Flanchard +1"}
sets.precast.JA['Dark Seal'] = {head="Fallen's burgeonet"}
sets.precast.JA['Souleater'] = {head="Ignominy burgeonet +1"}
sets.precast.JA['Weapn Bash'] = {hands="Ignominy Gauntlets +1"}
sets.precast.JA['Blood Weapon'] = {body="Fallen's Cuirass +3"}
sets.precast.JA['Last Resort'] = {back=Ankou.WSD}
sets.CapacityMantle = { back="Mecistopins Mantle" }
sets.WSDayBonus = { head="Gavialis Helm" }
sets.WSBack = { back="Trepidity Mantle" }
-- Earring considerations, given Lugra's day/night stats
sets.BrutalLugra = { ear1="Brutal Earring", ear2="Lugra Earring +1" }
sets.IshvaraLugra = { ear1="Ishvara Earring", ear2="Lugra Earring +1" }
sets.Lugra = { ear1="Lugra Earring +1" }
sets.Brutal = { ear1="Brutal Earring" }
sets.Ishvara = { ear1="Ishvara Earring" }
-- Waltz set (chr and vit)
-- sets.precast.Waltz = {}
-- Fast cast sets for spells
sets.precast.FC = {
ammo="Impatiens",
head="Fallen's Burgeonet",
body="Fallen's Cuirass +3",
ear1="Etiolation Earring",
ear2="Loquacious Earring",
hands="Leyline Gloves",
ring1="Prolix Ring",
ring2="Kishar Ring",
legs="Eschite Cuisses",
back=Ankou.FC,
feet=Odyssean.Feet.FC
}
sets.precast.FC['Elemental Magic'] = set_combine(sets.precast.FC, {
head="Cizin Helm +1",
neck="Stoicheion Medal"
})
sets.precast.FC['Enfeebling Magic'] = set_combine(sets.precast.FC, {
head="Cizin Helm +1",
})
sets.precast.FC.Cure = set_combine(sets.precast.FC, {
-- body="Jumalik Mail",
})
-- Midcast Sets
sets.midcast.FastRecast = {
ammo="Impatiens",
head="Fallen's Burgeonet +1",
back="Grounded Mantle +1",
waist="Sailfi Belt +1",
legs="Carmine Cuisses +1",
feet=Odyssean.Feet.FC
}
sets.midcast.Trust = {
head="Fallen's Burgeonet +1",
hands="Odyssean Gauntlets",
body="Fallen's Cuirass +3",
legs="Carmine Cuisses +1",
feet=Odyssean.Feet.FC
}
sets.midcast["Apururu (UC)"] = set_combine(sets.midcast.Trust, {
body="Apururu Unity shirt",
})
-- Specific spells
sets.midcast.Utsusemi = {
ammo="Impatiens",
head="Otomi Helm",
neck="Incanter's Torque",
body="Founder's Breastplate",
hands="Leyline Gloves",
back="Grounded Mantle +1",
feet=Odyssean.Feet.FC
}
sets.midcast['Dark Magic'] = {
ammo="Pemphredo Tathlum",
head="Flamma Zucchetto +2", -- 44 macc
head="Ignominy Burgeonet +1", -- 17
neck="Erra Pendant", -- 10 dark + 17 macc
ear1="Gwati Earring",
ear2="Dark Earring", -- 3
body="Flamma Korazin +2",
hands="Flamma Manopolas +1",
waist="Casso Sash", -- 5
ring1="Archon Ring", -- 10
ring2="Evanescence Ring", -- 8 macc
back=Niht.DarkMagic, -- 10
legs="Flamma Dirs", -- 18 + 39macc
feet="Flam. Gambieras +2 " -- macc 33
}
sets.midcast.Endark = set_combine(sets.midcast['Dark Magic'], {
head="Ignominy Burgeonet +1",
hands="Fallen's Finger Gauntlets +1"
})
sets.midcast['Dark Magic'].Acc = set_combine(sets.midcast['Dark Magic'], {
head="Flamma Zucchetto +2", -- 44 macc
hands="Leyline Gloves",
waist="Eschan Stone"
})
sets.midcast['Enfeebling Magic'] = set_combine(sets.midcast['Dark Magic'], {
head="Valorous Mask",
neck="Erra Pendant", -- 10 + 17 macc
hands="Leyline Gloves",
ring2="Kishar Ring",
back="Aput Mantle"
})
sets.midcast['Elemental Magic'] = {
ammo="Pemphredo Tathlum",
head="Flamma Zucchetto +2", -- mab+15 mdmg+15
neck="Eddy Necklace", -- 11 matk
ear1="Friomisi Earring", -- 10 matk
ear2="Hecate's Earring", -- 6 matk 6 mdmg
body="Fallen's Cuirass +3",
hands="Carmine Finger Gauntlets +1",
ring1="Resonance Ring", -- int 8
ring2="Shiva Ring", -- matk 4
waist="Eschan Stone", -- macc/matk 7
legs="Eschite Cuisses", -- matk 25
back="Aput Mantle", -- mdmg 10
feet="Founder's Greaves" -- matk 29
}
-- Mix of HP boost, -Spell interruption%, and Dark Skill
sets.midcast['Dread Spikes'] = set_combine(sets.midcast['Dark Magic'], {
ammo="Impatiens",
head="Ignominy Burgeonet +1", -- 17
ear1="Odnowa Earring +1",
ear2="Eabani Earring", -- 3
body="Heathen's Cuirass +1",
hands="Fallen's Finger Gauntlets +1",
back="Trepidity Mantle",
})
sets.midcast['Dread Spikes'].Acc = set_combine(sets.midcast['Dark Magic'], {
body="Heathen's Cuirass +1",
hands="Fallen's Finger Gauntlets +1"
})
-- Drain spells
sets.midcast.Drain = set_combine(sets.midcast['Dark Magic'], {
head="Fallen's Burgeonet",
ear1="Gwati Earring",
ear2="Hirudinea Earring",
feet="Ratri Sollerets +1"
})
sets.midcast.Aspir = sets.midcast.Drain
sets.midcast.Drain.Acc = set_combine(sets.midcast.Drain, {
hands="Leyline Gloves",
waist="Eschan Stone", -- macc/matk 7
})
sets.midcast.Aspir.Acc = sets.midcast.Drain.Acc
sets.midcast.Drain.OhShit = set_combine(sets.midcast.Drain, {
legs="Carmine Cuisses +1",
feet="Ratri Sollerets"
})
-- Absorbs
sets.midcast.Absorb = set_combine(sets.midcast['Dark Magic'], {
head="Flamma Zucchetto +2", -- 44 macc
back="Chuparrosa Mantle",
hands="Pavor Gauntlets",
ring2="Kishar Ring",
})
sets.midcast['Absorb-TP'] = set_combine(sets.midcast.Absorb, {
hands="Heathen's Gauntlets +1",
ring2="Kishar Ring",
})
sets.midcast['Absorb-TP'].Acc = set_combine(sets.midcast.Absorb.Acc, {
hands="Heathen's Gauntlets +1",
ring2="Kishar Ring",
})
sets.midcast.Absorb.Acc = set_combine(sets.midcast['Dark Magic'].Acc, {
back="Chuparrosa Mantle",
hands="Pavor Gauntlets",
ring2="Kishar Ring",
})
-- Ranged for xbow
sets.precast.RA = {
head="Otomi Helm",
feet="Ejekamal Boots",
hands="Carmine Finger Gauntlets +1"
}
sets.midcast.RA = {
ear2="Tripudio Earring",
ring1="Cacoethic Ring +1",
waist="Chaac Belt",
}
-- WEAPONSKILL SETS
-- General sets
sets.precast.WS = {
ammo="Knobkierrie",
head="Flamma Zucchetto +2",
neck="Fotia Gorget",
ear1="Ishvara Earring",
ear2="Brutal Earring",
body="Ignominy cuirass +2",
hands="Sulevia's Gauntlets +2",
ring1="Petrov Ring",
ring2="Niqmaddu Ring",
back="Ankou's Mantle",
waist="Fotia Belt",
legs="Ignominy Flanchard +2",
feet="Sulevia's Leggings +1"
}
sets.precast.WS.Mid = set_combine(sets.precast.WS, {
legs="Fallen's Flanchard +3",
})
sets.precast.WS.Acc = set_combine(sets.precast.WS.Mid, {
body="Fallen's Cuirass +3",
waist="Olseni Belt",
})
-- RESOLUTION
-- 86-100% STR
sets.precast.WS.Resolution = set_combine(sets.precast.WS, {
ear2="Brutal Earring",
neck="Fotia Gorget",
body="Ignominy cuirass +2",
hands="Sulevia's Gauntlets +2",
waist="Fotia Belt",
legs="Ignominy Flanchard +2",
feet="Sulevia's Leggings +1"
})
sets.precast.WS.Resolution.Acc = set_combine(sets.precast.WS.Resolution.Mid, {
ammo="Seething Bomblet +1",
legs="Ignominy Flanchard +2",
feet="Sulevia's Leggings +1"
})
-- TORCLEAVER
-- VIT 80%
sets.precast.WS.Torcleaver = set_combine(sets.precast.WS, {
head="Odyssean Helm",
body="Ignominy Cuirass +2",
neck="Fotia Gorget",
waist="Fotia Belt",
back=Ankou.VIT,
legs="Ignominy Flanchard +2",
})
sets.precast.WS.Torcleaver.Mid = set_combine(sets.precast.WS.Mid, {
neck="Fotia Gorget",
})
sets.precast.WS.Torcleaver.Acc = set_combine(sets.precast.WS.Torcleaver.Mid, {
neck="Fotia Gorget",
body="Fallen's Cuirass +3",
legs=Odyssean.Legs.WS
})
-- INSURGENCY
-- 20% STR / 20% INT
-- Base set only used at 3000TP to put AM3 up
sets.precast.WS.Insurgency = set_combine(sets.precast.WS, {
head="Flamma Zucchetto +2",
neck="Fotia Gorget",
body="Ignominy Cuirass +2",
legs="Ignominy Flanchard +2",
ring2="Flamma Ring",
waist="Fotia Belt",
})
sets.precast.WS.Insurgency.Mid = set_combine(sets.precast.WS.Insurgency, {})
sets.precast.WS.Insurgency.Acc = set_combine(sets.precast.WS.Insurgency.Mid, {
ammo="Seething Bomblet +1",
body="Fallen's Cuirass +3",
legs=Odyssean.Legs.WS
})
sets.precast.WS.Catastrophe = set_combine(sets.precast.WS, {
head="Odyssean Helm",
neck="Fotia Gorget",
body="Ignominy Cuirass +2",
legs="Ignominy Flanchard +2",
waist="Fotia Belt",
ear1="Ishvara Earring",
})
sets.precast.WS.Catastrophe.Mid = set_combine(sets.precast.WS.Catastrophe, {})
sets.precast.WS.Catastrophe.Acc = set_combine(sets.precast.WS.Catastrophe.Mid, {
body="Fallen's Cuirass +3",
waist="Fotia Belt",
})
-- CROSS REAPER
-- 60% STR / 60% MND
sets.precast.WS['Cross Reaper'] = set_combine(sets.precast.WS, {
body="Ignominy Cuirass +2",
waist="Fotia Belt",
legs="Ignominy Flanchard +2",
})
sets.precast.WS['Cross Reaper'].Mid = set_combine(sets.precast.WS['Cross Reaper'], {})
sets.precast.WS['Cross Reaper'].Acc = set_combine(sets.precast.WS['Cross Reaper'].Mid, {
ammo="Seething Bomblet +1",
body="Fallen's Cuirass +3",
legs=Odyssean.Legs.WS
})
-- ENTROPY
-- 86-100% INT
sets.precast.WS.Entropy = set_combine(sets.precast.WS, {
neck="Fotia Gorget",
body="Ignominy Cuirass +2",
waist="Fotia Belt",
ring1="Petrov Ring",
ring2="Niqmaddu Ring",
legs="Ignominy Flanchard +2",
feet="Sulevia's Leggings +1"
})
sets.precast.WS.Entropy.Mid = set_combine(sets.precast.WS.Entropy, {
})
sets.precast.WS.Entropy.Acc = set_combine(sets.precast.WS.Entropy.Mid, {
body="Fallen's Cuirass +3",
ammo="Seething Bomblet +1",
})
-- Quietus
-- 60% STR / MND
sets.precast.WS.Quietus = set_combine(sets.precast.WS, {
neck="Fotia Gorget",
body="Ignominy Cuirass +2",
hands="Sulevia's Gauntlets +2",
waist="Grunfeld Rope",
legs="Ignominy Flanchard +2",
feet="Sulevia's Leggings +1",
})
sets.precast.WS.Quietus.Mid = set_combine(sets.precast.WS.Quietus, {
})
sets.precast.WS.Quietus.Acc = set_combine(sets.precast.WS.Quietus.Mid, {
body="Fallen's Cuirass +3",
ammo="Seething Bomblet +1",
legs=Odyssean.Legs.WS
})
-- SPIRAL HELL
-- 50% STR / 50% INT
sets.precast.WS['Spiral Hell'] = set_combine(sets.precast.WS['Entropy'], {
neck="Fotia Gorget",
body="Ignominy Cuirass +2",
waist="Metalsinger belt",
})
sets.precast.WS['Spiral Hell'].Mid = set_combine(sets.precast.WS['Spiral Hell'], sets.precast.WS.Mid, { })
sets.precast.WS['Spiral Hell'].Acc = set_combine(sets.precast.WS['Spiral Hell'], sets.precast.WS.Acc, { })
-- SHADOW OF DEATH
-- 40% STR 40% INT - Darkness Elemental
sets.precast.WS['Shadow of Death'] = set_combine(sets.precast.WS['Entropy'], {
head="Odyssean Helm",
neck="Eddy Necklace",
body="Fallen's Cuirass +3",
ear1="Friomisi Earring",
hands="Carmine Finger Gauntlets +1",
back=Ankou.WSD,
legs="Fallen's Flanchard +3",
waist="Eschan Stone", -- macc/matk 7
feet="Sulevia's Leggings +2"
})
sets.precast.WS['Shadow of Death'].Mid = set_combine(sets.precast.WS['Shadow of Death'], sets.precast.WS.Mid, {
})
sets.precast.WS['Shadow of Death'].Acc = set_combine(sets.precast.WS['Shadow of Death'], sets.precast.WS.Acc, {
})
-- DARK HARVEST
-- 40% STR 40% INT - Darkness Elemental
sets.precast.WS['Dark Harvest'] = sets.precast.WS['Shadow of Death']
sets.precast.WS['Dark Harvest'].Mid = set_combine(sets.precast.WS['Shadow of Death'], {head="Terminal Helm", feet="Heathen's Sollerets +1"})
sets.precast.WS['Dark Harvest'].Acc = set_combine(sets.precast.WS['Shadow of Death'], {head="Terminal Helm", feet="Heathen's Sollerets +1"})
-- Sword WS's
-- SANGUINE BLADE
-- 50% MND / 50% STR Darkness Elemental
sets.precast.WS['Sanguine Blade'] = set_combine(sets.precast.WS, {
head="Terminal Helm",
neck="Eddy Necklace",
ear1="Friomisi Earring",
body="Fallen's Cuirass +3",
hands="Founder's Gauntlets",
back=Ankou.WSD,
feet="Heathen's Sollerets +1"
})
sets.precast.WS['Sanguine Blade'].Mid = set_combine(sets.precast.WS['Sanguine Blade'], sets.precast.WS.Mid)
sets.precast.WS['Sanguine Blade'].Acc = set_combine(sets.precast.WS['Sanguine Blade'], sets.precast.WS.Acc)
-- REQUIESCAT
-- 73% MND - breath damage
sets.precast.WS.Requiescat = set_combine(sets.precast.WS, {
head="Flamma Zucchetto +2",
neck="Shadow Gorget",
body="Ignominy Cuirass +2",
hands="Odyssean Gauntlets",
waist="Soil Belt",
})
sets.precast.WS.Requiescat.Mid = set_combine(sets.precast.WS.Requiscat, sets.precast.WS.Mid)
sets.precast.WS.Requiescat.Acc = set_combine(sets.precast.WS.Requiscat, sets.precast.WS.Acc)
-- Idle sets
sets.idle.Town = {
ammo="Ginsen",
head="Flamma zucchetto +2",
neck="Loricate Torque +1",
ear1="Mache Earring +1",
ear2="Brutal Earring",
body="Flamma korazin +2",
hands="Sulevia's Gauntlets +2",
ring1="Vocane Ring",
ring2="Defending Ring",
back="Solemnity Cape",
waist="Flume Belt",
legs="Ignominy Flanchard +2",
feet="Flamma gambieras +2"
}
sets.idle.Field = set_combine(sets.idle.Town, {
head="Valorous Mask",
body="Sulevia's Platemail +2",
})
sets.idle.Regen = set_combine(sets.idle.Field, {
head="Flamma zucchetto +2",
neck="Sanctity Necklace",
body="Lugra Cloak +1",
ring1="Paguroidea Ring",
ring2="Sheltered Ring",
})
sets.idle.Refresh = set_combine(sets.idle.Regen, {
head="Befouled Crown",
body="Jumalik mail",
neck="Coatl Gorget +1"
})
sets.idle.Weak = set_combine(sets.defense.PDT, {
head="Baghere Salade",
neck="Sanctity Necklace",
body="Sulevia's Platemail +2",
hands="Sulevia's Gauntlets +2",
ring1="Paguroidea Ring",
ring2="Defending Ring",
back=Ankou.STP,
waist="Flume Belt",
legs="Sulevia's Cuisses +2",
feet="Volte Sollerets"
})
-- Defense sets
sets.defense.PDT = {
ammo="Hasty Pinion +1", -- 2% haste
head="Sulevia's Mask +2", -- 3% haste
neck="Agitator's Collar",
body="Jumalik Mail", -- 3% haste
--body="Sulevia's Platemail +1", -- 1% haste
hands="Sulevia's Gauntlets +2", -- 3% haste
ear1="Etiolation Earring",
ring1="Vocane Ring",
ring2="Defending Ring",
back="Grounded Mantle +1", -- 2% haste
waist="Ioskeha Belt", -- 7% haste
legs="Sulevia's Cuisses +2", -- 2% haste
feet="Volte Sollerets" -- 3% haste
}
sets.defense.Reraise = sets.idle.Weak
sets.defense.MDT = set_combine(sets.defense.PDT, {
neck="Loricate Torque +1",
body="Lugra Cloak +1",
ear1="Etiolation Earring",
back="Impassive Mantle",
})
sets.Kiting = {
legs="Carmine Cuisses +1",
}
sets.Reraise = {head="Twilight Helm",body="Twilight Mail"}
-- sets.HighHaste = {
-- ammo="Ginsen",
-- head="Argosy Celata",
-- }
-- Defensive sets to combine with various weapon-specific sets below
-- These allow hybrid acc/pdt sets for difficult content
sets.Defensive = {
--sub="Gracile grip",
ammo="Hasty Pinion +1",
head="Sulevia's Mask +2", -- 6%
neck="Agitator's Collar", -- 4% pdt
body="Valorous Mail",
hands="Sulevia's Gauntlets +2", -- 5% pdt
ring1="Niqmaddu Ring",
ring2="Defending Ring", -- 10% dt
back=Ankou.STP, -- 5% dt
waist="Ioskeha Belt",
legs="Sulevia's Cuisses +2", -- 7% dt
feet="Volte Sollerets" -- 4% pdt | 6% mdt
}
sets.Defensive_Mid = {
ammo="Hasty Pinion +1",
head="Sulevia's Mask +2",
neck="Loricate Torque +1",
body="Valorous Mail",
hands="Sulevia's Gauntlets +2",
ring1="Patricius Ring",
ring2="Defending Ring",
back=Ankou.STP,
waist="Ioskeha Belt",
legs="Sulevia's Cuisses +2",
feet="Volte Sollerets"
}
-- Higher DT, less haste
sets.DefensiveHigh = set_combine(sets.Defensive, {
ammo="Ginsen",
head="Sulevia's Mask +2",
neck="Agitator's Collar",
body="Sulevia's Platemail +2",
hands="Sulevia's Gauntlets +2",
ring1="Niqmaddu Ring",
ring2="Defending Ring",
legs="Sulevia's Cuisses +2",
feet="Volte Sollerets",
back=Ankou.STP,
})
sets.Defensive_Acc = set_combine(sets.Defensive_Mid, sets.DefensiveHigh)
-- Base set (global catch-all set)
sets.engaged = {
sub="Gracile Grip",
ammo="Ginsen",
head="Flamma Zucchetto +2",
neck="Sanctity Necklace",
ear1="Mache Earring +1",
ear2="Brutal Earring",
body="Flamma korazin +2",
hands="Sulevia's gauntlets +2",
ring1="Petrov Ring",
ring2="Niqmaddu Ring",
back="Ankou's Mantle",
waist="Ioskeha Belt",
legs="Ignominy Flanchard +2",
feet="Flamma Gambieras +2",
}
sets.engaged.Mid = set_combine(sets.engaged, {
body="Valorous Mail",
})
sets.engaged.Acc = set_combine(sets.engaged.Mid, {
-- ammo="Hasty Pinion +1",
ear1="Cessance Earring",
ear2="Zennaroi Earring",
body="Fallen's Cuirass +3",
back=Ankou.STP,
})
-- These only apply when delay is capped.
sets.engaged.Haste = set_combine(sets.engaged, {
waist="Ioskeha Belt",
})
sets.engaged.Haste.Mid = set_combine(sets.engaged.Mid, {})
sets.engaged.Haste.Acc = set_combine(sets.engaged.Acc, {})
-- Hybrid
sets.engaged.PDT = set_combine(sets.engaged, sets.Defensive)
sets.engaged.Mid.PDT = set_combine(sets.engaged.Mid, sets.Defensive_Mid)
sets.engaged.Acc.PDT = set_combine(sets.engaged.Acc, sets.Defensive_Acc)
-- Hybrid with capped delay
sets.engaged.Haste.PDT = set_combine(sets.engaged.PDT, sets.DefensiveHigh)
sets.engaged.Haste.Mid.PDT = set_combine(sets.engaged.Mid.PDT, sets.DefensiveHigh)
sets.engaged.Haste.Acc.PDT = set_combine(sets.engaged.Acc.PDT, sets.DefensiveHigh)
-- Liberator
sets.engaged.Liberator = sets.engaged
sets.engaged.Liberator.Mid = sets.engaged.Mid
sets.engaged.Liberator.Acc = set_combine(sets.engaged.Acc, {
body="Fallen's Cuirass +3",
})
-- Liberator AM3
sets.engaged.Liberator.AM3 = set_combine(sets.engaged.Liberator, {
ammo="Ginsen",
head="Flamma Zucchetto +2",
body="Valorous Mail",
neck="Abyssal Bead Necklace +1",
hands="Flamma Manopolas +2",
ear1="Cessance Earring",
ear2="Tripudio Earring",
ring1="Niqmaddu Ring",
ring2="Flamma Ring",
back=Ankou.STP,
waist="Sailfi Belt +1",
legs=Odyssean.Legs.TP,
feet="Flamma Gambieras +2",
})
sets.engaged.Liberator.Mid.AM3 = set_combine(sets.engaged.Liberator.AM3, {
neck="Abyssal Bead Necklace +1",
legs=Odyssean.Legs.TP,
})
sets.engaged.Liberator.Acc.AM3 = set_combine(sets.engaged.Liberator.Mid.AM3, {
ear2="Zennaroi Earring",
body="Fallen's Cuirass +3",
waist="Ioskeha Belt",
legs="Ignominy Flanchard +3",
})
sets.engaged.Haste.Liberator = set_combine(sets.engaged.Liberator, {
waist="Windbuffet Belt +1",
})
sets.engaged.Haste.Liberator.Mid = sets.engaged.Liberator.Mid
sets.engaged.Haste.Liberator.Acc = sets.engaged.Liberator.Acc
sets.engaged.Haste.Liberator.AM3 = set_combine(sets.engaged.Liberator.AM3, {
waist="Windbuffet Belt +1"
})
sets.engaged.Haste.Liberator.Mid.AM3 = sets.engaged.Liberator.Mid.AM3
sets.engaged.Haste.Liberator.Acc.AM3 = sets.engaged.Liberator.Acc.AM3
-- Hybrid
sets.engaged.Liberator.PDT = set_combine(sets.engaged.Liberator, {
head="Sulevia's Mask +2",
neck="Abyssal Bead Necklace +1",
hands="Sulevia's Gauntlets +2",
ring2="Defending Ring",
back=Ankou.STP,
waist="Sailfi Belt +1",
feet="Volte Sollerets",
})
sets.engaged.Liberator.Mid.PDT = set_combine(sets.engaged.Liberator.PDT, {
ammo="Hasty Pinion +1",
body="Sulevia's Platemail +2"
})
sets.engaged.Liberator.Acc.PDT = set_combine(sets.engaged.Liberator.Acc, sets.Defensive_Acc)
-- Hybrid with AM3 up
sets.engaged.Liberator.PDT.AM3 = set_combine(sets.engaged.Liberator.AM3, sets.Defensive)
sets.engaged.Liberator.Mid.PDT.AM3 = set_combine(sets.engaged.Liberator.Mid.AM3, sets.Defensive_Mid)
sets.engaged.Liberator.Acc.PDT.AM3 = set_combine(sets.engaged.Liberator.Acc.AM3, sets.Defensive_Acc)
-- Hybrid with capped delay
sets.engaged.Haste.Liberator.PDT = set_combine(sets.engaged.Liberator.PDT, sets.DefensiveHigh)
sets.engaged.Haste.Liberator.Mid.PDT = set_combine(sets.engaged.Liberator.Mid.PDT, sets.DefensiveHigh)
sets.engaged.Haste.Liberator.Acc.PDT = set_combine(sets.engaged.Liberator.Acc.PDT, sets.DefensiveHigh)
-- Hybrid with capped delay + AM3 up
sets.engaged.Haste.Liberator.PDT.AM3 = set_combine(sets.engaged.Liberator.PDT.AM3, sets.DefensiveHigh)
sets.engaged.Haste.Liberator.Mid.PDT.AM3 = set_combine(sets.engaged.Liberator.Mid.PDT.AM3, sets.DefensiveHigh)
sets.engaged.Haste.Liberator.Acc.PDT.AM3 = set_combine(sets.engaged.Liberator.Acc.PDT.AM3, sets.DefensiveHigh)
-- Apocalypse
sets.engaged.Apocalypse = set_combine(sets.engaged, {
ear1="Mache Earring +1",
ear2="Brutal Earring",
})
sets.engaged.Apocalypse.Mid = set_combine(sets.engaged.Mid, {
neck="Sanctity Necklace",
})
sets.engaged.Apocalypse.Acc = set_combine(sets.engaged.Acc, {
ear2="Zennaroi Earring",
legs="Ignominy Flanchard +2",
})
sets.engaged.Apocalypse.AM = set_combine(sets.engaged.Apocalypse, {
waist="Ioskeha Belt",
})
sets.engaged.Apocalypse.Mid.AM = set_combine(sets.engaged.Apocalypse.AM, {
})
sets.engaged.Apocalypse.Acc.AM = set_combine(sets.engaged.Apocalypse.Mid.AM, {
ear1="Mache Earring +1",
ear2="Brutal Earring",
ring2="Cacoethic Ring +1",
waist="Ioskeha Belt",
})
sets.engaged.Haste.Apocalypse = set_combine(sets.engaged.Apocalypse, {
waist="Ioskeha Belt",
})
sets.engaged.Haste.Apocalypse.Mid = sets.engaged.Apocalypse.Mid
sets.engaged.Haste.Apocalypse.Acc = sets.engaged.Apocalypse.Acc
-- Hybrid
sets.engaged.Apocalypse.PDT = set_combine(sets.engaged.Apocalypse, sets.Defensive)
sets.engaged.Apocalypse.Mid.PDT = set_combine(sets.engaged.Apocalypse.Mid, sets.Defensive_Mid)
sets.engaged.Apocalypse.Acc.PDT = set_combine(sets.engaged.Apocalypse.Acc, sets.Defensive_Acc)
-- Hybrid with relic AM
sets.engaged.Apocalypse.PDT.AM = set_combine(sets.engaged.Apocalypse, sets.Defensive)
sets.engaged.Apocalypse.Mid.PDT.AM = set_combine(sets.engaged.Apocalypse.Mid, sets.Defensive_Mid)
sets.engaged.Apocalypse.Acc.PDT.AM = set_combine(sets.engaged.Apocalypse.Acc, sets.Defensive_Acc)
-- Hybrid with capped delay
sets.engaged.Haste.Apocalypse.PDT = set_combine(sets.engaged.Apocalypse.PDT, sets.DefensiveHigh)
sets.engaged.Haste.Apocalypse.Mid.PDT = set_combine(sets.engaged.Apocalypse.Mid.PDT, sets.DefensiveHigh)
sets.engaged.Haste.Apocalypse.Acc.PDT = set_combine(sets.engaged.Apocalypse.Acc.PDT, sets.DefensiveHigh)
-- Hybrid with capped delay + AM3 up
sets.engaged.Haste.Apocalypse.PDT.AM3 = set_combine(sets.engaged.Apocalypse.PDT.AM3, sets.DefensiveHigh)
sets.engaged.Haste.Apocalypse.Mid.PDT.AM3 = set_combine(sets.engaged.Apocalypse.Mid.PDT.AM3, sets.DefensiveHigh)
sets.engaged.Haste.Apocalypse.Acc.PDT.AM3 = set_combine(sets.engaged.Apocalypse.Acc.PDT.AM3, sets.DefensiveHigh)
-- generic scythe
sets.engaged.Scythe = set_combine(sets.engaged, {})
sets.engaged.Scythe.Mid = set_combine(sets.engaged.Mid, {})
sets.engaged.Scythe.Acc = set_combine(sets.engaged.Acc, {})
sets.engaged.Scythe.PDT = set_combine(sets.engaged.Scythe, sets.Defensive)
sets.engaged.Scythe.Mid.PDT = set_combine(sets.engaged.Scythe.Mid, sets.Defensive_Mid)
sets.engaged.Scythe.Acc.PDT = set_combine(sets.engaged.Scythe.Acc, sets.Defensive_Acc)
sets.engaged.Haste.Scythe = set_combine(sets.engaged.Haste, {})
sets.engaged.Haste.Scythe.Mid = set_combine(sets.engaged.Haste.Mid, {})
sets.engaged.Haste.Scythe.Acc = set_combine(sets.engaged.Haste.Acc, {})
sets.engaged.Haste.Scythe.PDT = set_combine(sets.engaged.Scythe.PDT, sets.DefensiveHigh)
sets.engaged.Haste.Scythe.Mid.PDT = set_combine(sets.engaged.Scythe.Mid.PDT, sets.DefensiveHigh)
sets.engaged.Haste.Scythe.Acc.PDT = set_combine(sets.engaged.Scythe.Acc.PDT, sets.DefensiveHigh)
-- generic great sword
sets.engaged.GreatSword = set_combine(sets.engaged, {
hands="Flamma Manopolas +2",
})
sets.engaged.GreatSword.Mid = set_combine(sets.engaged.Mid, {})
sets.engaged.GreatSword.Acc = set_combine(sets.engaged.Acc, {
body="Fallen's Cuirass +3",
legs="Ignominy Flanchard +3",
})
sets.engaged.GreatSword.PDT = set_combine(sets.engaged.GreatSword, sets.Defensive)
sets.engaged.GreatSword.Mid.PDT = set_combine(sets.engaged.GreatSword.Mid, sets.Defensive_Mid)
sets.engaged.GreatSword.Acc.PDT = set_combine(sets.engaged.GreatSword.Acc, sets.Defensive_Acc)
sets.engaged.Haste.GreatSword = set_combine(sets.engaged.Haste, {})
sets.engaged.Haste.GreatSword.Mid = set_combine(sets.engaged.Haste.Mid, {})
sets.engaged.Haste.GreatSword.Acc = set_combine(sets.engaged.Haste.Acc, {})
sets.engaged.Haste.GreatSword.PDT = set_combine(sets.engaged.GreatSword.PDT, sets.DefensiveHigh)
sets.engaged.Haste.GreatSword.Mid.PDT = set_combine(sets.engaged.GreatSword.Mid.PDT, sets.DefensiveHigh)
sets.engaged.Haste.GreatSword.Acc.PDT = set_combine(sets.engaged.GreatSword.Acc.PDT, sets.DefensiveHigh)
-- Ragnarok
sets.engaged.Ragnarok = set_combine(sets.engaged.GreatSword, {})
sets.engaged.Ragnarok.Mid = set_combine(sets.engaged.GreatSword.Mid, {})
sets.engaged.Ragnarok.Acc = set_combine(sets.engaged.GreatSword.Acc, {})
sets.engaged.Ragnarok.PDT = set_combine(sets.engaged.Ragnarok, sets.Defensive)
sets.engaged.Ragnarok.Mid.PDT = set_combine(sets.engaged.Ragnarok.Mid, sets.Defensive_Mid)
sets.engaged.Ragnarok.Acc.PDT = set_combine(sets.engaged.Ragnarok.Acc, sets.Defensive_Acc)
-- Caladbolg
sets.engaged.Caladbolg = set_combine(sets.engaged.GreatSword, {
hands="Flamma Manopolas +2"
})
sets.engaged.Caladbolg.Mid = set_combine(sets.engaged.GreatSword.Mid, {
hands="Flamma Manopolas +2"
})
sets.engaged.Caladbolg.Acc = set_combine(sets.engaged.GreatSword.Acc, {
hands="Flamma Manopolas +2",
body="Fallen's Cuirass +3",
legs="Ignominy Flanchard +3",
})
sets.engaged.Caladbolg.PDT = set_combine(sets.engaged.Caladbolg, sets.Defensive)
sets.engaged.Caladbolg.Mid.PDT = set_combine(sets.engaged.Caladbolg.Mid, sets.Defensive_Mid)
sets.engaged.Caladbolg.Acc.PDT = set_combine(sets.engaged.Caladbolg.Acc, sets.Defensive_Acc)
sets.engaged.Haste.Caladbolg = set_combine(sets.engaged.Caladbolg, {
hands="Sulevia's Gauntlets +2",
waist="Windbuffet Belt +1"
})
sets.engaged.Haste.Caladbolg.Mid = set_combine(sets.engaged.Caladbolg.Mid, {
hands="Sulevia's Gauntlets +2",
})
sets.engaged.Haste.Caladbolg.Acc = set_combine(sets.engaged.Caladbolg.Acc, {
hands="Sulevia's Gauntlets +2",
})
sets.engaged.Haste.Caladbolg.PDT = set_combine(sets.engaged.Caladbolg.PDT, sets.DefensiveHigh)
sets.engaged.Haste.Caladbolg.Mid.PDT = set_combine(sets.engaged.Caladbolg.Mid.PDT, sets.DefensiveHigh)
sets.engaged.Haste.Caladbolg.Acc.PDT = set_combine(sets.engaged.Caladbolg.Acc.PDT, sets.DefensiveHigh)
-- dual wield
sets.engaged.DW = set_combine(sets.engaged, {
ear1="Eabani Earring",
ear2="Suppanomimi",
waist="Patentia Sash",
legs="Carmine Cuisses +1",
})
sets.engaged.DW.Mid = set_combine(sets.engaged.DW, {
neck="Abyssal Bead Necklace +1",
})
sets.engaged.DW.Acc = set_combine(sets.engaged.DW.Mid, {
ear2="Zennaroi Earring",
})
-- single wield (sword + shield possibly)
sets.engaged.SW = set_combine(sets.engaged, {
ammo="Yetshila",
})
sets.engaged.SW.Mid = set_combine(sets.engaged.Mid, {})
sets.engaged.SW.Acc = set_combine(sets.engaged.Acc, {})
sets.engaged.Reraise = set_combine(sets.engaged, {
head="Twilight Helm",
neck="Twilight Torque",
body="Twilight Mail"
})
sets.buff.Souleater = {
head="Ignominy Burgeonet +1",
--body="Ratri Breastplate",
}
-- sets.buff['Last Resort'] = {
-- feet="Fallen's Sollerets +1"
-- }
end
function job_pretarget(spell, action, spellMap, eventArgs)
if spell.type:endswith('Magic') and buffactive.silence then
eventArgs.cancel = true
send_command('input /item "Echo Drops" <me>')
end
end
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
-- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
function job_precast(spell, action, spellMap, eventArgs)
aw_custom_aftermath_timers_precast(spell)
end
function job_post_precast(spell, action, spellMap, eventArgs)
local recast = windower.ffxi.get_ability_recasts()
-- Make sure abilities using head gear don't swap
if spell.type:lower() == 'weaponskill' then
-- handle Gavialis Helm
if use_gavialis then
if is_sc_element_today(spell) then
if wsList:contains(spell.english) then
-- do nothing
else
equip(sets.WSDayBonus)
end
end
end
-- CP mantle must be worn when a mob dies, so make sure it's equipped for WS.
if state.CapacityMode.value then
equip(sets.CapacityMantle)
end
-- if spell.english == 'Entropy' and recast[95] == 0 then
-- eventArgs.cancel = true
-- send_command('@wait 4.0;input /ja "Consume Mana" <me>')
-- --windower.chat.input:schedule(1, '/ws "Entropy" <t>')
-- return
-- end
if player.tp > 2999 then
if wsList:contains(spell.english) then
equip(sets.IshvaraLugra)
else
equip(sets.BrutalLugra)
end
else -- use Lugra + moonshade
if world.time >= (17*60) or world.time <= (7*60) then
equip(sets.Lugra)
else
if wsList:contains(spell.english) then
equip(sets.Ishvara)
else
equip(sets.Brutal)
end
end
end
end
end
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_midcast(spell, action, spellMap, eventArgs)
end
-- Run after the default midcast() is done.
-- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
function job_post_midcast(spell, action, spellMap, eventArgs)
if spell.english:startswith('Drain') then
if player.status == 'Engaged' and state.CastingMode.current == 'Normal' and player.hpp < 70 then
classes.CustomClass = 'OhShit'
end
end
if (state.HybridMode.current == 'PDT' and state.PhysicalDefenseMode.current == 'Reraise') then
equip(sets.Reraise)
end
end
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_aftercast(spell, action, spellMap, eventArgs)
aw_custom_aftermath_timers_aftercast(spell)
if state.Buff[spell.english] ~= nil then
state.Buff[spell.english] = not spell.interrupted or buffactive[spell.english]
end
end
function job_post_aftercast(spell, action, spellMap, eventArgs)
if spell.type == 'WeaponSkill' then
if state.Buff.Souleater and state.SouleaterMode.value then
send_command('@wait 1.0;cancel souleater')
--enable("head")
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- Customization hooks for idle and melee sets, after they've been automatically constructed.
-------------------------------------------------------------------------------------------------------------------
-- Called before the Include starts constructing melee/idle/resting sets.
-- Can customize state or custom melee class values at this point.
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_handle_equipping_gear(status, eventArgs)
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if player.mpp < 70 then
idleSet = set_combine(idleSet, sets.idle.Refresh)
end
if player.hpp < 70 then
idleSet = set_combine(idleSet, sets.idle.Regen)
end
if state.HybridMode.current == 'PDT' then
idleSet = set_combine(idleSet, sets.defense.PDT)
end
return idleSet
end
-- Modify the default melee set after it was constructed.
function customize_melee_set(meleeSet)
if state.TreasureMode.value == 'None' then
meleeSet = set_combine(meleeSet, sets.TreasureHunter)
end
if state.CapacityMode.value then
meleeSet = set_combine(meleeSet, sets.CapacityMantle)
end
if state.Buff['Souleater'] then
meleeSet = set_combine(meleeSet, sets.buff.Souleater)
end
--meleeSet = set_combine(meleeSet, select_earring())
return meleeSet
end
-------------------------------------------------------------------------------------------------------------------
-- General hooks for other events.
-------------------------------------------------------------------------------------------------------------------
-- Called when the player's status changes.
function job_status_change(newStatus, oldStatus, eventArgs)
if newStatus == "Engaged" then
--if state.Buff['Last Resort'] then
-- send_command('@wait 1.0;cancel hasso')
--end
-- handle weapon sets
if gsList:contains(player.equipment.main) then
state.CombatWeapon:set("GreatSword")
elseif scytheList:contains(player.equipment.main) then
state.CombatWeapon:set("Scythe")
elseif player.equipment.main == 'Apocalypse' then
state.CombatWeapon:set('Apocalypse')
elseif player.equipment.main == 'Anguta' then
state.CombatWeapon:set('Anguta')
elseif player.equipment.main == 'Ragnarok' then
state.CombatWeapon:set('Ragnarok')
elseif player.equipment.main == 'Caladbolg' then
state.CombatWeapon:set('Caladbolg')
elseif player.equipment.main == 'Liberator' then
state.CombatWeapon:set('Liberator')
else -- use regular set, which caters to Liberator
state.CombatWeapon:reset()
end
--elseif newStatus == 'Idle' then
-- determine_idle_group()
end
end
-- Called when a player gains or loses a buff.
-- buff == buff gained or lost
-- gain == true if the buff was gained, false if it was lost.
function job_buff_change(buff, gain)
if state.Buff[buff] ~= nil then
handle_equipping_gear(player.status)
end
if S{'haste', 'march', 'embrava', 'geo-haste', 'indi-haste', 'last resort'}:contains(buff:lower()) then
if (buffactive['Last Resort']) then
if (buffactive.embrava or buffactive.haste) and buffactive.march then
state.CombatForm:set("Haste")
if not midaction() then
handle_equipping_gear(player.status)
end
end
else
if state.CombatForm.current ~= 'DW' and state.CombatForm.current ~= 'SW' then
state.CombatForm:reset()
end
if not midaction() then
handle_equipping_gear(player.status)
end
end
end
-- Drain II/III HP Boost. Set SE to stay on.
if buff == "Max HP Boost" and state.SouleaterMode.value then
if gain or buffactive['Max HP Boost'] then
state.SouleaterMode:set(false)
else
state.SouleaterMode:set(true)
end
end
-- Make sure SE stays on for BW
if buff == 'Blood Weapon' and state.SouleaterMode.value then
if gain or buffactive['Blood Weapon'] then
state.SouleaterMode:set(false)
else
state.SouleaterMode:set(true)
end
end
-- AM custom groups
if buff:startswith('Aftermath') then
if player.equipment.main == 'Liberator' then
classes.CustomMeleeGroups:clear()
if (buff == "Aftermath: Lv.3" and gain) or buffactive['Aftermath: Lv.3'] then
classes.CustomMeleeGroups:append('AM3')
add_to_chat(8, '-------------Mythic AM3 UP-------------')
-- elseif (buff == "Aftermath: Lv.3" and not gain) then
-- add_to_chat(8, '-------------Mythic AM3 DOWN-------------')
end
if not midaction() then
handle_equipping_gear(player.status)
end
else
classes.CustomMeleeGroups:clear()
if buff == "Aftermath" and gain or buffactive.Aftermath then
classes.CustomMeleeGroups:append('AM')
end
if not midaction() then
handle_equipping_gear(player.status)
end
end
end
-- if buff == "Samurai Roll" then
-- classes.CustomRangedGroups:clear()
-- if (buff == "Samurai Roll" and gain) or buffactive['Samurai Roll'] then
-- classes.CustomRangedGroups:append('SamRoll')
-- end
-- end
--if buff == "Last Resort" then
-- if gain then
-- send_command('@wait 1.0;cancel hasso')
-- else
-- if not midaction() then
-- send_command('@wait 1.0;input /ja "Hasso" <me>')
-- end
-- end
--end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements self-commands.
-------------------------------------------------------------------------------------------------------------------
-- Called by the 'update' self-command, for common needs.
-- Set eventArgs.handled to true if we don't want automatic equipping of gear.
function job_update(cmdParams, eventArgs)
war_sj = player.sub_job == 'WAR' or false
get_combat_form()
get_combat_weapon()
update_melee_groups()
select_default_macro_book()
end
-- State buff checks that will equip buff gear and mark the event as handled.
function check_buff(buff_name, eventArgs)
if state.Buff[buff_name] then
equip(sets.buff[buff_name] or {})
if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then
equip(sets.TreasureHunter)
end
eventArgs.handled = true
end
end
-- Check for various actions that we've specified in user code as being used with TH gear.
-- This will only ever be called if TreasureMode is not 'None'.
-- Category and Param are as specified in the action event packet.
function th_action_check(category, param)
if category == 2 or -- any ranged attack
--category == 4 or -- any magic action
(category == 3 and param == 30) or -- Aeolian Edge
(category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish
(category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish
then
return true
end
end
-- function get_custom_wsmode(spell, spellMap, default_wsmode)
-- if state.OffenseMode.current == 'Mid' then
-- if buffactive['Aftermath: Lv.3'] then
-- return 'AM3Mid'
-- end
-- elseif state.OffenseMode.current == 'Acc' then
-- if buffactive['Aftermath: Lv.3'] then
-- return 'AM3Acc'
-- end
-- else
-- if buffactive['Aftermath: Lv.3'] then
-- return 'AM3'
-- end
-- end
-- end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
function get_combat_form()
if S{'NIN', 'DNC'}:contains(player.sub_job) and swordList:contains(player.equipment.main) then
state.CombatForm:set("DW")
--elseif player.equipment.sub == '' or shields:contains(player.equipment.sub) then
elseif swordList:contains(player.equipment.main) then
state.CombatForm:set("SW")
elseif buffactive['Last Resort'] then
if (buffactive.embrava or buffactive.haste) and buffactive.march then
add_to_chat(8, '-------------Delay Capped-------------')
state.CombatForm:set("Haste")
else
state.CombatForm:reset()
end
else
state.CombatForm:reset()
end
end
function get_combat_weapon()
state.CombatWeapon:reset()
if player.equipment.main == 'Apocalypse' then
state.CombatWeapon:set('Apocalypse')
elseif player.equipment.main == 'Anguta' then
state.CombatWeapon:set('Anguta')
elseif player.equipment.main == 'Ragnarok' then
state.CombatWeapon:set('Ragnarok')
elseif player.equipment.main == 'Caladbolg' then
state.CombatWeapon:set('Caladbolg')
elseif player.equipment.main == 'Liberator' then
state.CombatWeapon:set('Liberator')
elseif gsList:contains(player.equipment.main) then
state.CombatWeapon:set("GreatSword")
elseif scytheList:contains(player.equipment.main) then
state.CombatWeapon:set("Scythe")
end
end
function aw_custom_aftermath_timers_precast(spell)
if spell.type == 'WeaponSkill' then
info.aftermath = {}
local mythic_ws = "Insurgency"
info.aftermath.weaponskill = mythic_ws
info.aftermath.duration = 0
info.aftermath.level = math.floor(player.tp / 1000)
if info.aftermath.level == 0 then
info.aftermath.level = 1
end
if spell.english == mythic_ws and player.equipment.main == 'Liberator' then
-- nothing can overwrite lvl 3
if buffactive['Aftermath: Lv.3'] then
return
end
-- only lvl 3 can overwrite lvl 2
if info.aftermath.level ~= 3 and buffactive['Aftermath: Lv.2'] then
return
end
if info.aftermath.level == 1 then
info.aftermath.duration = 90
elseif info.aftermath.level == 2 then
info.aftermath.duration = 120
else
info.aftermath.duration = 180
end
end
end
end
-- Call from job_aftercast() to create the custom aftermath timer.
function aw_custom_aftermath_timers_aftercast(spell)
if not spell.interrupted and spell.type == 'WeaponSkill' and
info.aftermath and info.aftermath.weaponskill == spell.english and info.aftermath.duration > 0 then
local aftermath_name = 'Aftermath: Lv.'..tostring(info.aftermath.level)
send_command('timers d "Aftermath: Lv.1"')
send_command('timers d "Aftermath: Lv.2"')
send_command('timers d "Aftermath: Lv.3"')
send_command('timers c "'..aftermath_name..'" '..tostring(info.aftermath.duration)..' down abilities/aftermath'..tostring(info.aftermath.level)..'.png')
info.aftermath = {}
end
end
function display_current_job_state(eventArgs)
local msg = ''
msg = msg .. 'Offense: '..state.OffenseMode.current
msg = msg .. ', Hybrid: '..state.HybridMode.current
if state.DefenseMode.value ~= 'None' then
local defMode = state[state.DefenseMode.value ..'DefenseMode'].current
msg = msg .. ', Defense: '..state.DefenseMode.value..' '..defMode
end
if state.CombatForm.current ~= '' then
msg = msg .. ', Form: ' .. state.CombatForm.current
end
if state.CombatWeapon.current ~= '' then
msg = msg .. ', Weapon: ' .. state.CombatWeapon.current
end
if state.CapacityMode.value then
msg = msg .. ', Capacity: ON, '
end
if state.SouleaterMode.value then
msg = msg .. ', SE Cancel, '
end
-- if state.LastResortMode.value then
-- msg = msg .. ', LR Defense, '
-- end
if state.PCTargetMode.value ~= 'default' then
msg = msg .. ', Target PC: '..state.PCTargetMode.value
end
if state.SelectNPCTargets.value then
msg = msg .. ', Target NPCs'
end
add_to_chat(123, msg)
eventArgs.handled = true
end
-- Set eventArgs.handled to true if we don't want the automatic display to be run.
-- Handle notifications of general user state change.
function job_state_change(stateField, newValue, oldValue)
end
-- Creating a custom spellMap, since Mote capitalized absorbs incorrectly
function job_get_spell_map(spell, default_spell_map)
if spell.skill == 'Dark Magic' and absorbs:contains(spell.english) then
return 'Absorb'
end
if spell.type == 'Trust' then
return 'Trust'
end
end
function select_earring()
if world.time >= (17*60) or world.time <= (7*60) then
return sets.Lugra
else
return sets.Brutal
end
end
function update_melee_groups()
classes.CustomMeleeGroups:clear()
-- mythic AM
if player.equipment.main == 'Liberator' then
if buffactive['Aftermath: Lv.3'] then
classes.CustomMeleeGroups:append('AM3')
end
else
-- relic AM
if buffactive['Aftermath'] then
classes.CustomMeleeGroups:append('AM')
end
-- if buffactive['Samurai Roll'] then
-- classes.CustomRangedGroups:append('SamRoll')
-- end
end
end
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'DNC' then
set_macro_page(1, 11)
elseif player.equipment.main == 'Apocalypse' then
set_macro_page(1, 11)
elseif player.equipment.main == 'Ragnarok' then
set_macro_page(2, 11)
elseif gsList:contains(player.equipment.main) then
set_macro_page(1, 11)
elseif player.sub_job == 'SAM' then
set_macro_page(1, 11)
else
set_macro_page(1, 11)
end
end
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.
|
|