|
Gearswap Support Thread
サーバ: Asura
Game: FFXI
Posts: 389
By Asura.Patriclis 2018-04-27 07:57:41
Hi!
Ever since adding a new augment on my Ogma's Capes gearswap stopped equipping them. Can anyone help me find out why?
New augments are added from the new ambuscade item Code
{ name="Ogma's cape", augments={'STR+20','Accuracy+20','Attack+20','"Dbl. Atk."+10','STR+10', 'Parrying rate +1%',}},
Give this a shot for the first cape.
if you have 2 sources for a specific stat (in this case you have STR from thread and from dye) you have to put them separately.
Equipping the gear and typing 'gs export' (no quotes) into the windower console is a good way to export an entire set of gear, including augments. The exported set will show up in windower/addons/gearswap/data/export.
This will be a -very- important thing when you get to Oseem augments since he can put 1-30 attack on 'slot 1' and another 1-15 attack on 'slot 5' and there's no way to tell how much attack is from which slot other than using //gs export.
I'm not sure what's wrong with the second cape since I've never used the eva/mag.eva augment (though i have my guesses) BUT just use gs export and it will solve your problem.
サーバ: Asura
Game: FFXI
Posts: 389
By Asura.Patriclis 2018-04-27 08:16:55
Yes this would be for a WS. I am looking to equip a specific set for when the Sneak Attack buff is active. If Sneak attack is active equip X, if not use normal Rudra set. Similar to how the Climantic flourish active function is. Just have no idea how to go about plugging a SA in without breaking something x.x
Thank you in advance for your help
Literally exactly like you have climactic flourish
In job_setup() add: Code
state.Buff['Sneak Attack'] = buffactive['sneak attack'] or false
In job_post_precast() add: Code
if state.Buff['Sneak Attack'] then
equip(sets.SneakAttackOrWhateverYouWannaCallThisShit)
end
Never be afraid to make a backup of your working gearswap and experiment. You can always restore back to a working copy. A good programmer shouldn't be afraid of breaking something (as long as they have a backup). There won't always be people around to help you, so learn to experiment and figure this stuff out, you'll be better off in the long run.
By Narvosa 2018-04-27 08:59:53
Awesome thank you for your help! I will mess with it when I can.
サーバ: Asura
Game: FFXI
Posts: 389
By Asura.Patriclis 2018-04-27 11:43:20
Hey all
So after successfully adjusting a few rules before on other luas I fool-heatedly raced in blind to try make this pup lua work more how I want it to (original kine one treats whm head as a mage.. even with VE body), but now I am way in over my head and 5 hrs of bashing my head against the wall I need help please -.-
https://github.com/Mayoyama/PUP/blob/master/PUPFaulty.lua
https://github.com/Mayoyama/PUP/blob/master/Mayoyamanakata_PUP_GearFaulty.lua
So I'm trying to make it so that GS will alter my idle and engaged sets depending on the state I cycle to, but the more I did the more it broke and now it just doesn't even register my pet being idle or engaged.
PLEASE HELP!
Just took a quick glance and found the following issues. I dont play PUP nor have I made a PUP lua so im not sure on any of the pet specific stuff. That said there are a couple of general errors that are going to be causing some of your problems.
Problem #1:
Code
elseif state.AutomatonMode.current ~= 'PetRanged' then
idleSet = sets.idle.Pet.Engaged.Ranged
The above is an example of a problem that occurs over and over in your lua. You are using ~= for your comparrisons. ~= means 'Does Not Equal'. So the above little code line is saying "If my automaton is NOT in ranged mode, use my ranged gear" which makes no sense. You want to use == for Is Equal.
So you should change that (and the other lines that do the same) to
Problem 2:
You're using customize_idle_set wrong. The documentation for customize_idle_set states that you should "Only use set_combine() to change the contents of the set." (https://github.com/Kinematics/GearSwap-Jobs/wiki/Rules)
So this is wrong: Code idleSet = sets.idle.Pet.Engaged
Ragnarok.Lockfort
サーバ: Ragnarok
Game: FFXI
Posts: 252
By Ragnarok.Lockfort 2018-04-27 11:59:30
I have an issue with the obi rule on my corsair, probably something dumb as usual. Did I just make a simple mistake somewhere when I stole this?
Thanks in advance for any help
Code
sets.Obi = {waist="Hachirin-no-Obi"}
function job_post_precast(spell, action, spellMap, eventArgs)
-- Equip obi if weather/day matches for WS/Quick Draw.
if spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
if spell.english == 'Leaden Salute' and (world.weather_element == 'Dark' or world.day_element == 'Dark') then
equip(sets.Obi)
elseif spell.english == 'Wildfire' and (world.weather_element == 'Fire' or world.day_element == 'Fire') then
equip(sets.Obi)
elseif spell.type == 'CorsairShot' and (spell.element == world.weather_element or spell.element == world.day_element) then
equip(sets.Obi)
end
end
end
Do you have a precast for your WS? Or is all you're equipping for leaden/wildfire the obi? This is mines:
Code if (spell.name == "Leaden Salute" or spell.name == "Wildfire") and (spell.element == world.day_element or spell.element == world.weather_element) then
equip({waist="Hachirin-no-Obi"})
end
By Squinookle 2018-04-27 12:02:04
Hi!
Ever since adding a new augment on my Ogma's Capes gearswap stopped equipping them. Can anyone help me find out why?
New augments are added from the new ambuscade item Code
{ name="Ogma's cape", augments={'STR+20','Accuracy+20','Attack+20','"Dbl. Atk."+10','STR+10', 'Parrying rate +1%',}},
Give this a shot for the first cape.
if you have 2 sources for a specific stat (in this case you have STR from thread and from dye) you have to put them separately.
Equipping the gear and typing 'gs export' (no quotes) into the windower console is a good way to export an entire set of gear, including augments. The exported set will show up in windower/addons/gearswap/data/export.
This will be a -very- important thing when you get to Oseem augments since he can put 1-30 attack on 'slot 1' and another 1-15 attack on 'slot 5' and there's no way to tell how much attack is from which slot other than using //gs export.
I'm not sure what's wrong with the second cape since I've never used the eva/mag.eva augment (though i have my guesses) BUT just use gs export and it will solve your problem. Thank you for the info! I will give it a try when I get home from work.
By hobo 2018-04-27 13:22:10
Ragnarok.Lockfort said: »I have an issue with the obi rule on my corsair, probably something dumb as usual. Did I just make a simple mistake somewhere when I stole this?
Thanks in advance for any help
Code
sets.Obi = {waist="Hachirin-no-Obi"}
function job_post_precast(spell, action, spellMap, eventArgs)
-- Equip obi if weather/day matches for WS/Quick Draw.
if spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
if spell.english == 'Leaden Salute' and (world.weather_element == 'Dark' or world.day_element == 'Dark') then
equip(sets.Obi)
elseif spell.english == 'Wildfire' and (world.weather_element == 'Fire' or world.day_element == 'Fire') then
equip(sets.Obi)
elseif spell.type == 'CorsairShot' and (spell.element == world.weather_element or spell.element == world.day_element) then
equip(sets.Obi)
end
end
end
Do you have a precast for your WS? Or is all you're equipping for leaden/wildfire the obi? This is mines:
Code if (spell.name == "Leaden Salute" or spell.name == "Wildfire") and (spell.element == world.day_element or spell.element == world.weather_element) then
equip({waist="Hachirin-no-Obi"})
end
I have a precast for the ws, just didn't quote it. I might just have to change luas instead of fixing this mess
Bismarck.Speedyjim
サーバ: Bismarck
Game: FFXI
Posts: 516
By Bismarck.Speedyjim 2018-04-30 01:31:22
This began appearing in my RUN lua after I set a few priorities. How do I fix this?
サーバ: Asura
Game: FFXI
Posts: 389
By Asura.Patriclis 2018-04-30 08:44:06
Bismarck.Speedyjim said: »This began appearing in my RUN lua after I set a few priorities. How do I fix this?
Nobody will be able to really help you since that error could refer to 1 of a billion places in your code.
Try posting your lua (use code blocks, i.e surround the code with [ code ] [ /code ] (no spaces)) and a better description of -when- that error occurs. (ie. when you try changing into idle? when casting any spell? using a weaponskill?)
Just posting a generic-*** error message gives us nothing to go on.
By Prohono 2018-04-30 08:59:51
Hello, I was wondering is it possible to have a lua change macro books based on the weapon you currently have equipped?
I see in the lua there's ways to set default macro books based on subjobs, is there a way to swap based on weapon (or weapon type), so when I change from GS to Scythe mid fight, it automatically changes the Macro book? (I have separate books for scythe and GS weapon skills)
Thanks!
サーバ: Asura
Game: FFXI
Posts: 389
By Asura.Patriclis 2018-04-30 10:27:27
Hello, I was wondering is it possible to have a lua change macro books based on the weapon you currently have equipped?
I see in the lua there's ways to set default macro books based on subjobs, is there a way to swap based on weapon (or weapon type), so when I change from GS to Scythe mid fight, it automatically changes the Macro book? (I have separate books for scythe and GS weapon skills)
Thanks!
So gearswap doesn't have a function (That I can find) to check when you change gear manually, so you'll have to have a button/command to update your macro book based on the equipped weapon. It's an extra step, but it's as close as I can get you.
Code
function get_sets()
--Binds ALT + ` to send the command 'MACRO' to gearswap
--You can change this to whatever key combination you want
send_command('bind !` gs c MACRO')
end
function user_unload()
-- Removes the binding so that it doesnt break ***when you change jobs
send_command('unbind !`')
end
function self_command(command)
-- If gearswap gets the "MACRO" command then
if command == "MACRO" then
--Call the command to change macros
ChangeMacrosBasedOnWeapon()
end
end
function ChangeMacrosBasedOnWeapon()
-- Ill explain this a bit.
-- Each weapon has an associated skill with it (duh) we find these values in the windower resources.
-- This skill is not stored as a string value (ie "Greatsword Skill") but rather as a number (ie "4").
-- To figure out which number is which you need to look in the items resource file in windower (or on their github)
-- And find the number that corrisponds to an item of that type.
-- Basically if you want to find out what number corrisponds to scythe skill,
-- just open the link i have given you below, Search for a scythe from the list, and look at the number in Skill=""
-- (I already got the numbers for scythe + greatsword for you... but if you want to expand this, thats what you
-- need to do)
-- Windower item resources: https://raw.githubusercontent.com/Windower/Resources/master/lua/items.lua
if player.equipment.main['Skill'] == 7 then -- Skill 7 = Scythe
send_command('@input /macro book 1;wait .1;input /macro set 1') --Or whatever macro book you want
elseif player.equipment.main['Skill'] == 4 then -- Skill 4 = Greatsword
send_command('@input /macro book 2;wait .2;input /macro set 2') --Or whatever macro book you want
else --This is your default (i.e if you decided to pull out an earth staff or something)
send_command('@input /macro book 2;wait .2;input /macro set 2') --Or whatever macro book you want
end
end
Obviously, if these functions already exist in your Lua, don't overwrite them just add my code in.
I don't have access to the game right now to test this and make sure it works SO if there's a problem with this code and it doesn't work, let me know, but be absolutely sure to include your LUA file with your issue so I can make sure it's a problem with my code and not your implementation.
Cheers and happy missing.
By Prohono 2018-04-30 19:59:42
Awesome! Thanks so much I'll be giving it a try tonight! Weirdly enough Alt + ` is already the key I binded to GS c C17 to swap weapons! hopefully I can build your code in so they work together in one key!
By Prohono 2018-04-30 20:35:17
Trying the script the MACRO command doesn't seem to work, I had to delete the existing subjob default macro selection lines as that was clashing with it, and the lua loads with no errors. But whether I bind the MACRO command or type it in directly (//gs c MACRO), it doesn't seem to switch the macro books, even after I manually change the weapons. Any ideas what could be going wrong? (I have already changed the books and sets to my correct numbers)
Thanks in advance!
Bismarck.Speedyjim
サーバ: Bismarck
Game: FFXI
Posts: 516
By Bismarck.Speedyjim 2018-04-30 23:38:30
Bismarck.Speedyjim said: »This began appearing in my RUN lua after I set a few priorities. How do I fix this?
Nobody will be able to really help you since that error could refer to 1 of a billion places in your code.
Try posting your lua (use code blocks, i.e surround the code with [ code ] [ /code ] (no spaces)) and a better description of -when- that error occurs. (ie. when you try changing into idle? when casting any spell? using a weaponskill?)
Just posting a generic-*** error message gives us nothing to go on. Here's a less generic-*** post.
Code -- Initialization function for this job file.
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()
-- /BLU Spell Maps
blue_magic_maps = {}
blue_magic_maps.Enmity = S{'Blank Gaze', 'Geist Wall', 'Jettatura', 'Soporific', 'Actinic Burst', 'Temporal Shift',
'Poison Breath', 'Blitzstrahl', 'Sheep Song', 'Chaotic Eye', 'Stinking Gas', 'Fantod'}
blue_magic_maps.Cure = S{'Wild Carrot', 'Pollen'}
blue_magic_maps.Buffs = S{'Cocoon', 'Refueling'}
rayke_duration = 35
gambit_duration = 92
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job. Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
function user_setup()
state.OffenseMode:options('Normal', 'MidAcc', 'HighAcc', 'MaxAcc') -- 'STP',
state.WeaponskillMode:options('Normal', 'Acc')
state.HybridMode:options('Normal', 'PDT')
state.CastingMode:options('Normal', 'Resistant')
state.IdleMode:options('Normal', 'DT', 'Refresh', 'Regen')
state.PhysicalDefenseMode:options('PDT', 'HP', 'Magic') -- ALT+F10
state.MagicalDefenseMode:options('MDT', 'Status')
state.WeaponLock = M(false, 'Weapon Lock')
state.Charm = M(false, 'Charm')
state.Knockback = M(false, 'Knockback')
state.Death = M(false, "Death Resistance")
state.CP = M(false, "Capacity Points Mode")
state.Runes = M{['description']='Runes', "Ignis", "Gelus", "Flabra", "Tellus", "Sulpor", "Unda", "Lux", "Tenebrae"}
state.Rune = M{['description']='which',
"Fire Dmg | Ice Resist: Paralyze, Bind, Frost",
"Ice Dmg | Wind Resist: Choke, Gravity, Silence",
"Wind dmg | Earth Resist: Slow, Petrify, Rasp",
"Earth dmg | Lightning Resist: Stun, Shock",
"Lightning Dmg | Water Resist: Poison, Drown",
"Water dmg | Fire Resist: Addle, Burn, Plague, Amnesia",
"Light Dmg | Dark Resist's: Blind, Bio, Sleep",
"Dark Dmg | Light Resist's: Repose, Dia, Charm"
}
send_command('bind ` input /ma "Flash" <t>')
send_command('bind ^` input //gs c rune')
send_command('bind !` input /ja "Vivacious Pulse" <me>')
send_command('bind @` input /ma "Stun" <t>')
send_command('bind ^- gs c cycleback Runes')
send_command('bind ^= gs c cycle Runes')
send_command('bind ^f10 gs c cycle PhysicalDefenseMode')
send_command('bind !f11 gs c cycle MagicalDefenseMode')
send_command('bind ^[ gs c toggle Knockback')
send_command('bind ^] gs c toggle Death')
send_command('bind ^\ gs c toggle Charm')
send_command('bind !q input /ma "Temper" <me>')
send_command('bind delete input /ws "Resolution" <t>')
send_command('bind end input /ws "Dimidiation" <t>')
send_command('bind @w gs c toggle WeaponLock')
send_command('bind ^f11 gs c toggle Kiting')
send_command('bind @c gs c toggle CP')
if player.sub_job == 'BLU' then
send_command('bind home input /ma "Cocoon" <me>')
elseif player.sub_job == 'WAR' then
send_command('bind home input /ja "Berserk" <me>')
send_command('bind != input /ja "Defender" <me>')
elseif player.sub_job == 'DRK' then
send_command('bind home input /ja "Last Resort" <me>')
send_command('bind ^home input /ja "Souleater" <me>')
send_command('bind !- input /ja "Weapon Bash" <me>')
elseif player.sub_job == 'SAM' then
send_command('bind home input /ja "Hasso" <me>')
send_command('bind ^home input /ja "Meditate" <me>')
send_command('bind !- input /ja "Sekkanoki" <me>')
end
select_default_macro_book()
set_lockstyle()
define_rune_info()
adjust_melee_groups()
target_distance = 5.5 -- Set Default Distance Here --
end
function user_unload()
send_command('unbind `')
send_command('unbind ^`')
send_command('unbind !`')
send_command('unbind @`')
send_command('unbind ^-')
send_command('unbind !-')
send_command('unbind @-')
send_command('unbind ^=')
send_command('unbind !=')
send_command('unbind @=')
send_command('unbind delete')
send_command('unbind end')
send_command('unbind home')
send_command('unbind ^delete')
send_command('unbind ^end')
send_command('unbind ^home')
send_command('unbind !delete')
send_command('unbind !end')
send_command('unbind !home')
send_command('unbind @delete')
send_command('unbind @end')
send_command('unbind @home')
send_command('unbind !q')
send_command('unbind !p')
send_command('unbind @c')
send_command('unbind !f9')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Start defining the sets
--------------------------------------
-- Priority defining gear: ring1={name="Ramuh Ring +1", priority=1},
-- Organizer: weapons
organizer_items = {"Aettir","Lionheart","Refined Grip +1","Utu Grip"}
------------------------------------------------------------------------------------------
-------------------------------------- Enmity set ----------------------------------------
------------------------------------------------------------------------------------------
sets.Enmity = {ammo="Iron Gobbet",
head={name="Halitus Helm", priority=2},neck="Unmoving Collar +1",ear1="Trux Earring",ear2="Friomisi Earring",
body={name="Emet Harness +1", priority=5},hands={name="Kurys Gloves", priority=7},ring1={name="Begrudging Ring", priority=1},ring2="Moonbeam Ring",
back={name=run_HP, priority=4},waist={name="Kasiri Belt", priority=6},legs={name="Erilaz Leg Guards +1", priority=3},feet={name="Erilaz Greaves +1", priority=8}}
------------------------------------------------------------------------------------------
-------------------------------------- Precast sets --------------------------------------
------------------------------------------------------------------------------------------
-- Precast sets to enhance JAs
sets.precast.JA['Vallation'] = set_combine(sets.Enmity, {body="Runeist's Coat +3",legs="Futhark Trousers +1",back=run_HP})
sets.precast.JA['Valiance'] = set_combine(sets.precast.JA['Vallation'], {})
sets.precast.JA['Pflug'] = set_combine(sets.Enmity, {feet="Runeist's Boots +2"})
sets.precast.JA['Battuta'] = set_combine(sets.Enmity, {head="Futhark Bandeau +1"})
sets.precast.JA['Liement'] = set_combine(sets.Enmity, {body="Futhark Coat +1"})
sets.precast.JA['Lunge'] = {ammo="Seeth. Bomblet +1",
head=herc_head_MAB,neck="Sanctity Necklace",ear1="Novio Earring",ear2="Friomisi Earring",
body="Samnuha Coat",hands="Leyline Gloves",ring1="Shiva Ring +1",ring2="Shiva Ring +1",
back="Toro Cape",waist="Eschan Stone",legs="Ayanmo Cosciales +2",feet="Ayanmo Gambieras +1"}
sets.precast.JA['Swipe'] = set_combine(sets.precast.JA['Lunge'], {})
sets.precast.JA['Gambit'] = {hands="Runeist's Mitons +3"}
sets.precast.JA['Rayke'] = {feet="Futhark Boots"}
sets.precast.JA['Elemental Sforzo'] = set_combine(sets.Enmity, {body="Futhark Coat +1"})
sets.precast.JA['Swordplay'] = set_combine(sets.Enmity, {hands="Futhark Mitons"})
sets.precast.JA['Embolden'] = set_combine(sets.Enmity, {back="Evasionist's Cape",head="Erilaz Galea +1",legs="Futhark Trousers +1"})
sets.precast.JA['Vivacious Pulse'] = set_combine(sets.Enmity, {head="Erilaz Galea +1",neck="Incanter's Torque",ring1="Stikini Ring",ring2="Stikini Ring",waist="Bishop's Sash",legs="Rune. Trousers +2"})
sets.precast.JA['One for All'] = set_combine(sets.Enmity, {})
sets.precast.JA['Provoke'] = set_combine(sets.Enmity, {})
sets.precast.Waltz = {}
sets.precast.Waltz['Healing Waltz'] = {}
------------------------------------------------------------------------------------------
-------------------------------------- Fastcast sets -------------------------------------
------------------------------------------------------------------------------------------
sets.precast.FC = {ammo="Staunch Tathlum",
head={name="Runeist's Bandeau +2", priority=3},neck="Unmoving Collar +1",ear1="Loquacious Earring",ear2={name="Odnowa Earring +1", priority=1},
body={name="Emet Harness +1", priority=6},hands={name="Leyline Gloves", priority=8},ring1="Kishar Ring",ring2={name="Moonbeam Ring", priority=2},
back={name=run_HP, priority=5},waist={name="Oneiros Belt", priority=7},legs={name="Erilaz Leg Guards +1", priority=4},feet={name="Carmine Greaves", priority=9}}
sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {legs="Futhark Trousers +1"})
sets.precast.FC.Cure = set_combine(sets.precast.FC, {ammo="Impatiens",ear2="Mendi. Earring"})
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {ammo="Impatiens",neck="Magoraga Beads"})
------------------------------------------------------------------------------------------
-------------------------------------- Weaponskill sets ----------------------------------
------------------------------------------------------------------------------------------
sets.precast.WS = {ammo="Knobkierrie",
head="Adhemar Bonnet +1",neck="Fotia Gorget",ear1="Moonshade Earring",ear2="Brutal earring",
body=herc_body_TA,hands="Meghanada Gloves +2",ring1="Epona's Ring",ring2="Regal Ring",
back=run_DA,waist="Fotia Belt",legs="Samnuha Tights",feet=herc_feet_TA}
sets.precast.WS.Acc = set_combine(sets.precast.WS, {ear2="Telos Earring",legs="Meg. Chausses +2"})
------------------------------------------------------------------------------------------
-------------------------------------- Resolution sets -----------------------------------
------------------------------------------------------------------------------------------
sets.precast.WS['Resolution'] = set_combine(sets.precast.WS, {
head="Lustratio Cap +1",ear2="Sherida Earring",body="Lustratio Harness +1",hands="Adhemar Wristbands +1",ring1="Niqmaddu Ring",legs="Meghanada Chausses +2",feet="Lustratio Leggings +1"})
sets.precast.WS['Resolution'].Acc = set_combine(sets.precast.WS['Resolution'], {ammo="Seething Bomblet +1",head="Dampening Tam",ear1="Telos Earring"})
------------------------------------------------------------------------------------------
-------------------------------------- Dimidiation sets ----------------------------------
------------------------------------------------------------------------------------------
sets.precast.WS['Dimidiation'] = set_combine(sets.precast.WS, {
ear2="Sherida Earring",body="Adhemar Jacket +1",ring1="Ilabrat Ring",ring2="Regal Ring",
back=run_WSD,waist="Fotia Belt",legs="Lustratio Subligar +1",feet="Lustratio Leggings +1"})
sets.precast.WS['Dimidiation'].Acc = set_combine(sets.precast.WS['Dimidiation'], {
hands="Meghanada Gloves +2",ring1="Ramuh Ring +1",ring2="Ramuh Ring +1"})
------------------------------------------------------------------------------------------
-------------------------------------- All other WS sets ---------------------------------
------------------------------------------------------------------------------------------
sets.precast.WS['Herculean Slash'] = set_combine(sets.precast.JA['Lunge'], {})
sets.precast.WS['Savage Blade'] = set_combine(sets.precast.WS, {ammo="Floestone",
head=herc_head_STRWSD,neck="Caro Necklace",ear1="Moonshade Earring",ear2="Ishvara Earring",
body=herc_body_STRWSD,hands=herc_hands_STRWSD,ring2="Regal Ring",
waist="Prosilio Belt +1",legs=herc_legs_STRWSD,feet=herc_feet_STRWSD})
sets.precast.WS['Sanguine Blade'] = set_combine(sets.precast.Lunge, {head="Pixie Hairpin +1",ear1="Moonshade Earring"})
sets.precast.WS['True Strike']= set_combine(sets.precast.WS['Resolution'], {})
sets.precast.WS['Judgment'] = set_combine(sets.precast.WS['Savage Blade'])
sets.precast.WS['Black Halo'] = set_combine(sets.precast.WS['Savage Blade'])
sets.precast.WS['Flash Nova'] = set_combine(sets.precast.Lunge, {})
sets.precast.WS['Shockwave'] = {ammo="Hydrocera",
head="Aya. Zucchetto +2",neck="Sanctity Necklace",ear1="Digni. Earring",ear2="Gwati Earring",
body="Ayanmo Corazza +2",hands="Leyline Gloves",ring1="Stikini Ring",ring2="Stikini Ring",
waist="Eschan Stone",legs="Aya. Cosciales +2",feet="Aya. Gambieras +1"}
------------------------------------------------------------------------------------------
-------------------------------------- Midcast sets --------------------------------------
------------------------------------------------------------------------------------------
sets.midcast.FastRecast = set_combine(sets.precast.FC, {})
sets.midcast.SpellInterrupt = {ammo="Staunch Tathlum",ring1="Evanescence Ring",legs="Carmine Cuisses +1"}
sets.midcast.Cure = {ammo="Staunch Tathlum",
head=herc_head_DT,neck="Loricate Torque +1",ear1="Roundel Earring",ear2="Mendi. Earring",
body="Vrikodara Jupon",hands="Buremte Gloves",ring1="Defending Ring",ring2="Gelatinous Ring +1",
waist="Gishdubar Sash",legs="Eri. Leg Guards +1",feet="Skaoi Boots"}
sets.midcast['Enhancing Magic'] = {
head={name="Carmine Mask", priority=7},neck="Incanter's Torque",ear1="Andoaa Earring",ear2={name="Odnowa Earring +1", priority=1},
body={name="Futhark Coat +1", priority=4},hands={name="Runeist's Mitons +3", priority=5},ring1="Stikini Ring",ring2={name="Moonbeam Ring", priority=2},
back="Evasionist's Cape",waist="Cascade Belt",legs={name="Carmine Cuisses +1", priority=7},feet={name="Erilaz Greaves +1", priority=8}}
sets.midcast.EnhancingDuration = {head="Erilaz Galea +1",legs="Futhark Trousers +1",back="Evasionist's Cape"}
sets.midcast['Temper'] = set_combine(sets.midcast['Enhancing Magic'], {head="Erilaz Galea +1"})
sets.midcast['Phalanx'] = set_combine(sets.midcast['Enhancing Magic'], {head="Futhark Bandeau +1"})
sets.midcast['Regen'] = set_combine(sets.midcast['Enhancing Magic'], {head="Runeist's Bandeau +2"})
sets.midcast.Refresh = set_combine(sets.midcast.EnhancingDuration, {waist="Gishdubar Sash"})
sets.midcast.Stoneskin = set_combine(sets.midcast['Enhancing Magic'], {})
sets.midcast.Protect = set_combine(sets.midcast.EnhancingDuration, {ring2="Sheltered Ring"})
sets.midcast.Shell = set_combine(sets.midcast.Protect, {})
sets.midcast.Crusade = set_combine(sets.midcast.EnhancingDuration, {})
sets.midcast['Divine Magic'] = {neck="Incanter's Torque",waist="Bishop's Sash",legs="Rune. Trousers +2"} --ring1="Stikini Ring",ring2="Stikini Ring",
sets.midcast.Flash = set_combine(sets.Enmity, {})
sets.midcast.Stun = set_combine(sets.Enmity, {})
sets.midcast.Foil = set_combine(sets.Enmity, {head="Erilaz Galea +1",legs="Futhark Trousers +1"})
sets.midcast.Diaga = set_combine(sets.Enmity, {})
sets.midcast.Utsusemi = set_combine(sets.midcast.SpellInterrupt, {})
sets.midcast['Blue Magic'] = {}
sets.midcast['Blue Magic'].Enmity = set_combine(sets.Enmity, {})
sets.midcast['Blue Magic'].Cure = set_combine(sets.midcast.Cure, {})
sets.midcast['Blue Magic'].Buff = set_combine(sets.midcast['Enhancing Magic'])
------------------------------------------------------------------------------------------
-------------------------------------- Idle sets -----------------------------------------
------------------------------------------------------------------------------------------
sets.idle = {ammo="Homiliary",
head="Rawhide Mask",neck="Loricate Torque +1",ear1={name="Odnowa Earring", priority=4},ear2={name="Odnowa Earring +1", priority=3},
body={name="Runeist's Coat +3", priority=2},hands=herc_hands_REF,ring1="Defending Ring",ring2="Gelatinous Ring +1",
back={name="Moonbeam Cape", priority=1},waist="Flume Belt",legs="Carmine Cuisses +1",feet="Erilaz Greaves +1"}
-- PDT: 20% | DT: 24
sets.idle.DT = set_combine(sets.idle, {ammo="Staunch Tathlum",
head=herc_head_DT,body={name="Futhark Coat +1", priority=2},hands=herc_hands_DT,ring2={name="Moonbeam Ring", priority=1},feet="Ayanmo Gambieras +1"})
sets.idle.Refresh = set_combine(sets.idle, {legs="Rawhide Trousers"})
sets.idle.Regen = set_combine(sets.idle.DT, {neck="Sanctity Necklace",ring1="Paguroidea Ring",ring2="Sheltered Ring"})
sets.idle.Town = set_combine(sets.idle, {head="Runeist's Bandeau +2",hands=herc_hands_DT})
sets.idle.Weak = set_combine(sets.idle.DT, {})
sets.Kiting = {legs="Carmine Cuisses +1"}
------------------------------------------------------------------------------------------
-------------------------------------- Defense sets --------------------------------------
------------------------------------------------------------------------------------------
sets.defense.PDT = {ammo="Staunch Tathlum",
head=herc_head_DT,neck="Loricate Torque +1", ear1="Ethereal Earring",ear2={name="Odnowa Earring +1", priority=1},
body={name="Futhark Coat +1", priority=3},ring1="Defending Ring",ring2={name="Moonbeam Ring", priority=2},
hands={name="Herculean Gloves", augments={'Attack+11','Damage taken-4%','STR+5','Accuracy+9'}, priority=7},
back={name="Ogma's cape", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Mag. Evasion+10','Enmity+10'}, priority=5},
waist="Flume Belt",legs={name="Erilaz Leg Guards +1", priority=4},feet={name="Turms Leggings", priority=8}}
-- DT: Ammo 2, Head 4, Neck 6, Body 7, Hands 4, Rings 14, TOTAL: 37%
-- PDT: Hands 2, Waist 4, Legs 7, TOTAL: 13%
sets.defense.MDT = {ammo="Staunch Tathlum",
head=herc_head_DT,neck="Loricate Torque +1",ear1="Etiolation Earring",ear2="Sanare Earring",
body="Futhark Coat +1",hands=herc_hands_DT,ring1="Defending Ring",ring2="Shadow Ring",
back="Engulfer Cape +1",waist="Flume Belt",legs="Ayanmo Cosciales +2",feet="Erilaz Greaves +1"}
sets.defense.Magic = {ammo="Staunch Tathlum",
head=herc_head_DT,neck="Warder's Charm +1",ear1="Etiolation Earring",ear2="Odnowa Earring +1",
body="Runeist's Coat +3",hands=herc_hands_DT,ring1="Defending Ring",ring2="Shadow Ring",
back="Reiki Cloak",waist="Flume Belt",legs="Eri. Leg Guards +1",feet="Erilaz Greaves +1"}
sets.defense.Status = {ammo="Staunch Tathlum",
head=herc_head_DT,neck="Loricate Torque +1",ear1="Hearty Earring",ear2="Odnowa Earring +1",
body="Runeist's Coat +3",hands="Erilaz Gauntlets +1",ring1="Defending Ring",ring2="Gelatinous Ring +1",
back="Evasionist's Cape",waist="Flume Belt",legs="Rune. Trousers +2",feet="Erilaz Greaves +1"}
sets.defense.HP = {ammo="Staunch Tathlum",
head=herc_head_DT,neck="Loricate Torque +1",ear1={name="Odnowa Earring", priority=4},ear2={name="Odnowa Earring +1", priority=3},
body={name="Runeist's Coat +3", priority=2},hands={name="Runeist's Mitons +3", priority=6},ring1="Defending Ring",ring2={name="Moonbeam Ring", priority=5},
back={name="Moonbeam Cape", priority=1},waist="Flume Belt",legs={name="Erilaz Leg Guards +1", priority=7},feet={name="Turms Leggings", priority=9}}
sets.defense.Critical = {}
--sets.defense.Knockback = {back="Repulse Mantle"}
sets.defense.Death = {body="Samnuha Coat",ring1="Warden's Ring"}
------------------------------------------------------------------------------------------
-------------------------------------- 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
-- General order that slots should be swapped out: Ammo > Head > Neck > Waist > Feet > Earring (Brutal) > Legs > everything else.
-- /SAM 35+15 sTP, /DRK 50 sTP
sets.engaged = {}
sets.engaged.MidAcc = {}
sets.engaged.HighAcc = {}
sets.engaged.MaxAcc = {}
------------------------------------------------------------------------------------------
---------------------------------------- SAM sets ----------------------------------------
------------------------------------------------------------------------------------------
sets.engaged.SAM = {ammo="Yamarang",
head="Adhemar Bonnet +1",neck="Anu Torque",ear1="Cessance Earring",ear2="Sherida Earring",
body="Adhemar Jacket +1",hands="Adhemar Wristbands +1",ring1="Niqmaddu Ring",ring2="Epona's Ring",
back=run_DA,waist="Windbuffet Belt +1",legs="Samnuha Tights",feet=herc_feet_TA}
-- STP: Lionheart 10, Yamarang 3, Anu 7, Sherida 5, Wristbands 7, Tights 7 = 39 STP
-- Accuracy: 1159 (no food, no buffs, non-escha)
sets.engaged.MidAcc.SAM = set_combine(sets.engaged, {neck="Combatant's Torque",hands="Adhemar Wristbands +1"})
sets.engaged.HighAcc.SAM = set_combine(sets.engaged.MidAcc, {ammo="Falcon Eye",waist="Ioskeha Belt +1",legs="Carmine Cuisses +1"})
sets.engaged.MaxAcc.SAM = set_combine(sets.engaged.HighAcc, {head="Carmine Mask",ear1="Dignitary's Earring",body=herc_body_ACC,ring1="Ramuh Ring +1",ring2="Ramuh Ring +1",feet=herc_feet_ACC})
-- Kentarch Belt +1
------------------------------------------------------------------------------------------
---------------------------------------- DRK sets ----------------------------------------
------------------------------------------------------------------------------------------
sets.engaged.DRK = {ammo="Yamarang",
head="Adhemar Bonnet +1",neck="Anu Torque",ear1="Telos Earring",ear2="Sherida Earring",
body="Adhemar Jacket +1",hands="Adhemar Wristbands +1",ring1="Niqmaddu Ring",ring2="Epona's Ring",
back=run_TP,waist="Windbuffet Belt +1",legs="Samnuha Tights",feet=herc_feet_TA}
-- STP: Lionheart 10, Yamarang 3, Anu 7, Sherida 5, Telos 5, Wristbands 7, Cape 10, Tights 7 = 54 STP
-- Accuracy: 1188 (no food, no buffs, non-escha)
sets.engaged.MidAcc.DRK = set_combine(sets.engaged.MidAcc.SAM,{})
sets.engaged.HighAcc.DRK = set_combine(sets.engaged.HighAcc.SAM,{})
sets.engaged.MaxAcc.DRK = set_combine(sets.engaged.MaxAcc.SAM,{})
------------------------------------------------------------------------------------------
-------------------------------------- Hybrid sets ---------------------------------------
------------------------------------------------------------------------------------------
sets.engaged.PDT = {ammo="Yamarang",
head={name="Ayanmo Zucchetto +2", priority=3},neck="Loricate Torque +1",ear1="Telos Earring",ear2="Sherida Earring",
body={name="Ayanmo Corazza +2", priority=2},hands=herc_hands_TA,ring1="Defending Ring",ring2="Niqmaddu Ring",
back=run_TP,waist="Ioskeha Belt +1",legs={name="Meghanada Chausses +2", priority=4},feet=herc_feet_TA}
-- PDT: Meg Hands 4, Back 10, Meg Legs 6, Herc Feet 2 = -22
-- DT: Aya Head 3, Body 6, Neck 6, Rings 14 = -25
sets.engaged.PDT.MidAcc = set_combine(sets.engaged.PDT,{})
sets.engaged.PDT.HighAcc = set_combine(sets.engaged.PDT.MidAcc,{})
sets.engaged.PDT.MaxAcc = set_combine(sets.engaged.PDT.HighAcc,{})
-- Custom buff sets
--sets.buff.Doom = {ring1="Saida Ring",ring2="Saida Ring",waist="Gishdubar Sash"}
sets.Embolden = set_combine(sets.midcast.EnhancingDuration, {back="Evasionist's Cape"})
sets.Battuta = {hands="Turms Mittaines"}
sets.CP = {back="Mecisto. Mantle"}
sets.Reive = {}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
function job_pretarget(spell,action)
if spell.type == "WeaponSkill" and player.status == 'Engaged' and spell.target.distance > target_distance then -- Cancel WS If You Are Out Of Range --
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Out of Range]')
return
end
end
function job_precast(spell, action, spellMap, eventArgs)
if spell.english == 'Lunge' then
local abil_recasts = windower.ffxi.get_ability_recasts()
if abil_recasts[spell.recast_id] > 0 then
send_command('input /jobability "Swipe" <t>')
add_to_chat(122, '***Lunge Aborted: Timer on Cooldown -- Downgrading to Swipe.***')
eventArgs.cancel = true
return
end
end
if spell.english == 'Valiance' then
local abil_recasts = windower.ffxi.get_ability_recasts()
if abil_recasts[spell.recast_id] > 0 then
send_command('input /jobability "Vallation" <me>')
eventArgs.cancel = true
return
end
end
if spellMap == 'Utsusemi' then
if buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then
cancel_spell()
add_to_chat(123, '**!! '..spell.english..' Canceled: [3+ IMAGES] !!**')
eventArgs.handled = true
return
elseif buffactive['Copy Image'] or buffactive['Copy Image (2)'] then
send_command('cancel 66; cancel 444; cancel Copy Image; cancel Copy Image (2)')
end
end
if (spell.type:endswith('Magic') or spell.type == "Ninjutsu" or spell.type == "Geomancy") then
if buffactive.Silence then
cancel_spell()
send_command('input /item "Echo Drops" <me>')
end
end
if spell.english == 'Berserk' then
if buffactive.Berserk then -- Change Berserk To Aggressor If Berserk Is On --
cancel_spell()
send_command('input /ja Aggressor <me>')
end
end
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 == 'Lunge' or spell.english == 'Swipe' then
local obi = get_obi(get_rune_obi_element())
if obi then
equip({waist=obi})
end
end
if spell.skill == 'Enhancing Magic' and classes.NoSkillSpells:contains(spell.english) then
equip(sets.midcast.EnhancingDuration)
end
-- If DefenseMode is active, apply that gear over midcast
-- choices. Precast is allowed through for fast cast on
-- spells, but we want to return to def gear before there's
-- time for anything to hit us.
-- Exclude Job Abilities from this restriction, as we probably want
-- the enhanced effect of whatever item of gear applies to them,
-- and only one item should be swapped out.
if state.DefenseMode.value ~= 'None' and (spell.type ~= 'JobAbility' or spell.english == "Phalanx") then
handle_equipping_gear(player.status)
eventArgs.handled = true
end
if buffactive['Reive Mark'] and spell.type == 'WeaponSkill' then
equip(sets.Reive)
end
end
function job_aftercast(spell, action, spellMap, eventArgs)
if spell.name == 'Rayke' and not spell.interrupted then
send_command('@timers c "Rayke ['..spell.target.name..']" '..rayke_duration..' down spells/00136.png')
send_command('wait '..rayke_duration..';input /p <bstar><bstar><bstar> <ldangle> Rayke: OFF <rdangle> <bstar><bstar><bstar> <call21>;')
elseif spell.name == 'Gambit' and not spell.interrupted then
send_command('@timers c "Gambit ['..spell.target.name..']" '..gambit_duration..' down spells/00136.png')
send_command('wait '..gambit_duration..';input /p <bstar><bstar><bstar> <ldangle> Gambit: OFF <rdangle> <bstar><bstar><bstar> <call21>;')
end
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
-- Called when the player's status changes.
function job_state_change(field, new_value, old_value)
classes.CustomDefenseGroups:clear()
classes.CustomDefenseGroups:append(state.Knockback.current)
classes.CustomDefenseGroups:append(state.Death.current)
classes.CustomMeleeGroups:clear()
classes.CustomMeleeGroups:append(state.Knockback.current)
classes.CustomMeleeGroups:append(state.Death.current)
end
function job_buff_change(buff,gain)
-- If we gain or lose any haste buffs, adjust which gear set we target.
--Embolden cape lock--
if buff == 'Embolden' then
if gain then
add_to_chat(122, 'On')
equip(sets.buff.Embolden)
disable('head','legs','back')
else
add_to_chat(122, 'Off')
enable('head','legs','back')
status_change(player.status)
end
end
end
-- Handle notifications of general user state change.
function job_state_change(stateField, newValue, oldValue)
if state.WeaponLock.value == true then
disable('main','sub')
else
enable('main','sub')
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if player.mpp < 51 then
idleSet = set_combine(idleSet, sets.latent_refresh)
end
if state.Knockback.value == true then
idleSet = set_combine(idleSet, sets.defense.Knockback)
end
if state.Death.value == true then
idleSet = set_combine(idleSet, sets.defense.Death)
end
if state.CP.current == 'on' then
equip(sets.CP)
disable('back')
else
enable('back')
end
return idleSet
end
function adjust_melee_groups()
classes.CustomMeleeGroups:clear()
if player.sub_job == "SAM" then
classes.CustomMeleeGroups:append('SAM')
elseif player.sub_job == "DRK" then
classes.CustomMeleeGroups:append('DRK')
end
end
-- Modify the default melee set after it was constructed.
function customize_melee_set(meleeSet)
if state.Knockback.value == true then
meleeSet = set_combine(meleeSet, sets.defense.Knockback)
end
if state.Death.value == true then
meleeSet = set_combine(meleeSet, sets.defense.Death)
end
return meleeSet
end
function customize_defense_set(defenseSet)
if state.Knockback.value == true then
defenseSet = set_combine(defenseSet, sets.defense.Knockback)
end
if state.Death.value == true then
defenseSet = set_combine(defenseSet, sets.defense.Death)
end
return defenseSet
end
-- Function to display the current relevant user state when doing an update.
-- Set eventArgs.handled to true if display was handled, and you don't want the default info shown.
function display_current_job_state(eventArgs)
local msg = 'Melee'
if state.CombatForm.has_value then
msg = msg .. ' (' .. state.CombatForm.value .. ')'
end
msg = msg .. ': '
msg = msg .. state.OffenseMode.value
if state.HybridMode.value ~= 'Normal' then
msg = msg .. '/' .. state.HybridMode.value
end
msg = msg .. ', WS: ' .. state.WeaponskillMode.value
if state.DefenseMode.value ~= 'None' then
msg = msg .. ', ' .. 'Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
end
if state.Kiting.value == true then
msg = msg .. ', Kiting'
end
msg = msg .. ', Rune: '..state.Runes.current ..''
add_to_chat(122, msg)
eventArgs.handled = true
end
-- Called by the 'update' self-command.
function job_update(cmdParams, eventArgs)
end
-------------------------------------------------------------------------------------------------------------------
-- General hooks for other events.
-------------------------------------------------------------------------------------------------------------------
function job_get_spell_map(spell, default_spell_map)
if spell.skill == 'Blue Magic' then
for category,spell_list in pairs(blue_magic_maps) do
if spell_list:contains(spell.english) then
return category
end
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements self-commands.
-------------------------------------------------------------------------------------------------------------------
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 job_self_command(cmdParams, eventArgs)
--[[if cmdParams[2] then
local tab = {
Ignis= "Ignis - [Resistance] Ice | Bind, Paralyze. [Damage] Fire",
Gelus= "Gelus - [Resistance] Wind | Gravity, Silence. [Damage] Ice.",
Flabra= "Flabra - [Resistance] Earth | Slow, Petrify. [Damage] Wind.",
Tellus= "Tellus - [Resistance] Lightning | Stun. [Damage] Earth.",
Sulpor= "Sulpor - [Resistance] Water | Poison. [Damage] Lightning.",
Unda= "Unda - [Resistance] Fire | Addle, Amnesia, Plague. [Damage] Water.",
Lux= "Lux - [Resistance] Dark | Bio, Curse, Doom, Sleep (Dark), Terror, Zombie. [Damage] Light.",
Tenebrae= "Tenebrae - [Resistance] Light | Charm, Dia, Sleep (Light). [Damage] Dark.",}
add_to_chat(7,tab[state.Runes.value])
end--]]
if cmdParams[1]:lower() == 'rune' then
send_command('@input /ja '..state.Runes.value..' <me>')
end
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
-- Select default macro book on initial load or subjob change.
function get_rune_obi_element()
weather_rune = buffactive[elements.rune_of[world.weather_element] or '']
day_rune = buffactive[elements.rune_of[world.day_element] or '']
local found_rune_element
if weather_rune and day_rune then
if weather_rune > day_rune then
found_rune_element = world.weather_element
else
found_rune_element = world.day_element
end
elseif weather_rune then
found_rune_element = world.weather_element
elseif day_rune then
found_rune_element = world.day_element
end
return found_rune_element
end
function get_obi(element)
if element and elements.obi_of[element] then
return (player.inventory[elements.obi_of[element]] or player.wardrobe[elements.obi_of[element]]) and elements.obi_of[element]
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
-- Default macro set/book: (set, book)
if player.sub_job == 'BLU' then
set_macro_page(2, 11)
else
set_macro_page(1, 11)
end
end
function set_lockstyle()
send_command('wait 6;input /lockstyleset 10')
end Message appears when I do a validate check. I've noticed this since I set priority swaps in certain sets. I think it may be related to my aliases. Thank you for your time. Code -- Rune Fencer
run_TP = {name="Ogma's cape", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Store TP"+10','Phys. dmg. taken-10%'}} -- Dye DONE! Resin DONE!
run_HP = {name="Ogma's cape", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Mag. Evasion+10','Enmity+10'}} -- DONE!
run_DA = {name="Ogma's cape", augments={'STR+20','Accuracy+20 Attack+20','STR+10','"Dbl.Atk."+10'}} -- DONE!
run_WSD = {name="Ogma's cape", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Weapon skill damage +10%'}} -- Dye DONE!
サーバ: Asura
Game: FFXI
Posts: 389
By Asura.Patriclis 2018-05-01 07:44:17
Trying the script the MACRO command doesn't seem to work, I had to delete the existing subjob default macro selection lines as that was clashing with it, and the lua loads with no errors. But whether I bind the MACRO command or type it in directly (//gs c MACRO), it doesn't seem to switch the macro books, even after I manually change the weapons. Any ideas what could be going wrong? (I have already changed the books and sets to my correct numbers)
Thanks in advance!
As i said in the post, you need to post your LUA.
It could be a problem with player.equipment.main['Skill']
or it could be your implementation.
But I can't know that unless I see your code. Can't just guess.
(note: My immediate guess is that 'skill' should be lower case, not capitalized.)
Edit: I need to try this when I get home. Im not sure i coded it correctly. I think I left out a step.
サーバ: Asura
Game: FFXI
Posts: 389
By Asura.Patriclis 2018-05-01 08:14:43
Bismarck.Speedyjim said: »Here's a less generic-*** post.
Message appears when I do a validate check. I've noticed this since I set priority swaps in certain sets. I think it may be related to my aliases. Thank you for your time.
Okay so the problem seems to be with this priority system:
head={name="Halitus Helm", priority=2}
My best guess would be that it doesn't like that priority in there for some reason. Regularly lua would allow that, but gearswap or gearswap validate may not allow you to put extra stuff in there.
Im not at my home computer, so i cant test it myself right now, but my suggestion would be to start a new lua that looks like this and validate it:
Code
function get_sets()
sets.TP = head={name="Halitus Helm", priority=2}
end
If this validates fine, you know your priority system isn't the issue, if it breaks, you know it is, and you can't use it.
Bismarck.Speedyjim
サーバ: Bismarck
Game: FFXI
Posts: 516
By Bismarck.Speedyjim 2018-05-03 00:19:17
The priority system works with lines of gear like your example above. It just for some reason bugs when there's an alias present. When I use /debugmode, it says that my "alias_piece_of_gear" didn't equip. There must be a different way to code it.
サーバ: Asura
Game: FFXI
Posts: 28
By Asura.Massacres 2018-05-03 02:40:45
Looks like gearswap is only working for Utsusemi:San,When i cast Utsusemi: Ichi or Ni gearswap doesn't work, It won't change Precast and midcast gear. Any idea why is it working fine for San and not ichi/ni?
Here's my file:
Code -- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.Buff.Migawari = buffactive.migawari or false
state.Buff.Doom = buffactive.doom or false
state.Buff.Yonin = buffactive.Yonin or false
state.Buff.Innin = buffactive.Innin or false
state.Buff.Futae = buffactive.Futae or false
determine_haste_group()
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job. Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
state.OffenseMode:options('Normal', 'Acc')
state.HybridMode:options('Normal', 'Evasion', 'PDT')
state.WeaponskillMode:options('Normal', 'Acc', 'Mod')
state.CastingMode:options('Normal', 'Resistant')
state.PhysicalDefenseMode:options('PDT', 'Evasion')
gear.MovementFeet = {name="Danzo Sune-ate"}
gear.DayFeet = "Danzo Sune-ate"
gear.NightFeet = "Ninja Kyahan"
send_command('wait 6;input /lockstyleset 98')
select_movement_feet()
select_default_macro_book(1, 3)
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Precast sets
--------------------------------------
-- Precast sets to enhance JAs
sets.precast.JA['Mijin Gakure'] = {legs="Mochizuki Hakama"}
sets.precast.JA['Futae'] = {legs="Iga Tekko +2"}
sets.precast.JA['Sange'] = {legs="Mochizuki Chainmail"}
-- Waltz set (chr and vit)
sets.precast.Waltz = {ammo="Sonia's Plectrum",
head="Mummu bonnet +1",ear1="Genmei earring",ear2="Odnowa earring +1",
body="Reiki osode",hands="Buremte Gloves",ring1="Spiral Ring",
back="Iximulew Cape",waist="Caudata Belt",legs="Nahtirah Trousers",feet="Otronif Boots +1"}
-- Uk'uxkaj Cap, Daihanshi Habaki
-- Don't need any special gear for Healing Waltz.
sets.precast.Waltz['Healing Waltz'] = {}
-- Set for acc on steps, since Yonin drops acc a fair bit
sets.precast.Step = {
head="Ryuo somen",neck="Sanctity Necklace",
body="Adhemar jacket",hands={ name="Herculean Gloves", augments={'Accuracy+24 Attack+24','Crit.hit rate+2','STR+9','Accuracy+8','Attack+15',}},ring1="Patricius Ring",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},waist="Kentarch Belt +1",legs="Hizamaru hizayoroi +1",feet="Mummu gamashes +1"}
sets.precast.Flourish1 = {waist="Chaac Belt"}
-- Fast cast sets for spells
sets.precast.FC = {ammo="Impatiens",
head="Herculean helm",neck="Orunmila's torque",ear2="Loquacious Earring",ear1="Etiolation Earring",
body="",hands="Leyline Gloves",ring1="Prolix Ring",ring2="Kishar ring",
back="Swith Cape",waist="Witful Belt",legs="",feet=""}
sets.precast.FC.Utsusemi = {ammo="Impatiens",
head="Herculean helm",neck="Magoraga beads",ear2="Loquacious Earring",ear1="Etiolation Earring",
body="Mochizuki Chainmail +1",hands="Leyline Gloves",ring1="Prolix Ring",ring2="Kishar ring",
back="Swith Cape",waist="Witful Belt",legs="",feet=""}
-- Snapshot for ranged
sets.precast.RA = {hands="Adhemar wristbands",legs="Adhemar kecks",feet="Adhemar gamashes"}
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {ammo="Seething bomblet +1",
head="Adhemar bonnet",neck="Fotia gorget",ear1="Ishvara Earring",ear2="Brutal Earring",
body="Adhemar jacket",hands={ name="Herculean Gloves", augments={'Accuracy+24 Attack+24','Crit.hit rate+2','STR+9','Accuracy+8','Attack+15',}},ring1="Ilabrat Ring",ring2="Epona's Ring",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}},waist="Fotia belt",legs="Samnuha tights",
feet={ name="Herculean Boots", augments={'Accuracy+21 Attack+21','"Triple Atk."+2','STR+5','Attack+13',}}}
sets.precast.WS.Acc = set_combine(sets.precast.WS, {ammo="Seething bomblet +1",hands={ name="Herculean Gloves", augments={'Accuracy+24 Attack+24','Crit.hit rate+2','STR+9','Accuracy+8','Attack+15',}},
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}}})
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
sets.precast.WS['Blade: Jin'] = {ammo="Seething bomblet +1",
head="Adhemar bonnet",neck="Fotia gorget",ear1="Ishvara Earring",ear2="Brutal Earring",
body="Abnoba kaftan",hands={ name="Herculean Gloves", augments={'Accuracy+24 Attack+24','Crit.hit rate+2','STR+9','Accuracy+8','Attack+15',}},ring1="Ilabrat Ring",ring2="Epona's Ring",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},waist="Fotia belt",legs="Samnuha tights",
feet={ name="Herculean Boots", augments={'Accuracy+21 Attack+21','"Triple Atk."+2','STR+5','Attack+13',}}}
sets.precast.WS['Blade: Hi'] = {ammo="Seething bomblet +1",
head="Adhemar bonnet",neck="Fotia gorget",ear1="Ishvara Earring",ear2="Brutal Earring",
body="Abnoba kaftan",hands="Kobo kote",ring1="Ilabrat Ring",ring2="Epona's Ring",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}},waist="Fotia belt",legs="Samnuha tights",
feet={ name="Herculean Boots", augments={'Accuracy+21 Attack+21','"Triple Atk."+2','STR+5','Attack+13',}}}
sets.precast.WS['Blade: Shun'] = {ammo="Seething bomblet +1",
head="Adhemar bonnet",neck="Fotia gorget",ear1="Ishvara Earring",ear2="Brutal Earring",
body="Adhemar jacket",hands="Adhemar wristbands",ring1="Ilabrat Ring",ring2="Epona's Ring",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},waist="Fotia belt",legs="Samnuha tights",
feet={ name="Herculean Boots", augments={'Attack+29','Weapon skill damage +4%','DEX+10',}}}
sets.precast.WS['Aeolian Edge'] = {ammo="Seething bomblet +1",
head={ name="Herculean Helm", augments={'Mag. Acc.+18 "Mag.Atk.Bns."+18','Crit. hit damage +1%','INT+10','Mag. Acc.+1','"Mag.Atk.Bns."+12',}},neck="Sanctity necklace",ear1="Friomisi Earring",ear2="Hecate's Earring",
body={ name="Herculean Vest", augments={'Mag. Acc.+19 "Mag.Atk.Bns."+19','Magic burst dmg.+3%','Mag. Acc.+14','"Mag.Atk.Bns."+12',}},hands={ name="Herculean Gloves", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','Crit. hit damage +2%','"Mag.Atk.Bns."+11',}},
ring1="Acumen Ring",ring2="Dingir Ring",back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}},waist="Eschan stone",
legs={ name="Herculean Trousers", augments={'Mag. Acc.+19 "Mag.Atk.Bns."+19','Phys. dmg. taken -1%','STR+5','Mag. Acc.+10','"Mag.Atk.Bns."+15',}},
feet={ name="Herculean Boots", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','"Fast Cast"+1','STR+9','Mag. Acc.+6','"Mag.Atk.Bns."+14',}}}
--------------------------------------
-- Midcast sets
--------------------------------------
sets.midcast.FastRecast = {ammo="Impatiens",
head="Herculean helm",neck="Orunmila's torque",ear2="Loquacious Earring",ear1="Etiolation Earring",
body="",hands="Leyline Gloves",ring1="Prolix Ring",
back="Swith Cape",waist="Witful Belt",legs="Lengo Pants",feet="Amalric nails"}
sets.midcast.Utsusemi = {ammo="Impatiens",
head="Herculean helm",neck="Orunmila's torque",ear2="Loquacious Earring",ear1="Etiolation Earring",
body="Mochizuki Chainmail +1",hands="Mochizuki tekko +1",ring1="Prolix Ring",
back="Andartia's Mantle",waist="Witful Belt",legs="Lengo Pants",feet="Hattori Kyahan +1"}
sets.midcast.ElementalNinjutsu = {ammo="Seething bomblet +1",
head={ name="Herculean Helm", augments={'Mag. Acc.+18 "Mag.Atk.Bns."+18','Crit. hit damage +1%','INT+10','Mag. Acc.+1','"Mag.Atk.Bns."+12',}},neck="Sanctity necklace",ear1="Friomisi Earring",ear2="Hecate's Earring",
body={ name="Herculean Vest", augments={'Mag. Acc.+19 "Mag.Atk.Bns."+19','Magic burst dmg.+3%','Mag. Acc.+14','"Mag.Atk.Bns."+12',}},hands="Mochizuki tekko +1",
ring1="Acumen Ring",ring2="Dingir Ring",back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}},waist="Eschan stone",
legs={ name="Herculean Trousers", augments={'Mag. Acc.+19 "Mag.Atk.Bns."+19','Phys. dmg. taken -1%','STR+5','Mag. Acc.+10','"Mag.Atk.Bns."+15',}},
feet={ name="Herculean Boots", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','"Fast Cast"+1','STR+9','Mag. Acc.+6','"Mag.Atk.Bns."+14',}}}
sets.midcast.ElementalNinjutsu.Resistant = {ammo="Seething bomblet +1",
head={ name="Herculean Helm", augments={'Mag. Acc.+18 "Mag.Atk.Bns."+18','Crit. hit damage +1%','INT+10','Mag. Acc.+1','"Mag.Atk.Bns."+12',}},neck="Sanctity necklace",ear1="Friomisi Earring",ear2="Hecate's Earring",
body={ name="Herculean Vest", augments={'Mag. Acc.+19 "Mag.Atk.Bns."+19','Magic burst dmg.+3%','Mag. Acc.+14','"Mag.Atk.Bns."+12',}},hands="Mochizuki tekko +1",
ring1="Acumen Ring",ring2="Dingir Ring",back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}},waist="Eschan stone",
legs={ name="Herculean Trousers", augments={'Mag. Acc.+19 "Mag.Atk.Bns."+19','Phys. dmg. taken -1%','STR+5','Mag. Acc.+10','"Mag.Atk.Bns."+15',}},
feet={ name="Herculean Boots", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','"Fast Cast"+1','STR+9','Mag. Acc.+6','"Mag.Atk.Bns."+14',}}}
sets.midcast.NinjutsuDebuff = {ammo="Seething bomblet +1",
head={ name="Herculean Helm", augments={'Mag. Acc.+18 "Mag.Atk.Bns."+18','Crit. hit damage +1%','INT+10','Mag. Acc.+1','"Mag.Atk.Bns."+12',}},neck="Sanctity necklace",ear1="Friomisi Earring",ear2="Hecate's Earring",
body={ name="Herculean Vest", augments={'Mag. Acc.+19 "Mag.Atk.Bns."+19','Magic burst dmg.+3%','Mag. Acc.+14','"Mag.Atk.Bns."+12',}},hands="Mochizuki tekko +1",
ring1="Acumen Ring",ring2="Dingir Ring",back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}},waist="Eschan stone",
legs={ name="Herculean Trousers", augments={'Mag. Acc.+19 "Mag.Atk.Bns."+19','Phys. dmg. taken -1%','STR+5','Mag. Acc.+10','"Mag.Atk.Bns."+15',}},
feet={ name="Herculean Boots", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','"Fast Cast"+1','STR+9','Mag. Acc.+6','"Mag.Atk.Bns."+14',}}}
sets.midcast.NinjutsuBuff = {ammo="Impatiens",
head="Herculean helm",neck="Orunmila's torque",ear2="Loquacious Earring",ear1="Etiolation Earring",
body="Mochizuki Chainmail +1",hands="Mochizuki tekko +1",ring1="Prolix Ring",
back="Andartia's Mantle",waist="Witful Belt",legs="Lengo Pants",feet="Hattori Kyahan +1"}
sets.midcast.RA = {
head="Felistris Mask",neck="Ej Necklace",
body="Hachiya Chainmail +1",hands="Hachiya Tekko",ring1="Beeline Ring",
back="Yokaze Mantle",legs="Nahtirah Trousers",feet="Qaaxo Leggings"}
-- Hachiya Hakama/Thurandaut Tights +1
--------------------------------------
-- Idle/resting/defense/etc sets
--------------------------------------
-- Resting sets
sets.resting = {ammo="Togakushi shuriken",
head={ name="Herculean Helm", augments={'Phys. dmg. taken -4%','Accuracy+14','Attack+11',}},neck="Loricate torque +1",ear1="Genmei Earring",ear2="Infused Earring",
body="Hizamaru haramaki +1",hands={ name="Herculean Gloves", augments={'Phys. dmg. taken -4%','STR+8','Accuracy+4','Attack+5',}},ring1="Defending Ring",ring2="Patricius ring",
back="Solemnity Cape",waist="Flume Belt",legs="Mummu kecks +1",feet={ name="Herculean Boots", augments={'Accuracy+2','Phys. dmg. taken -5%','Attack+11',}}}
-- Idle sets
sets.idle = {ammo="Togakushi shuriken",
head={ name="Herculean Helm", augments={'Phys. dmg. taken -4%','Accuracy+14','Attack+11',}},neck="Loricate torque +1",ear1="Genmei Earring",ear2="Infused Earring",
body="Hizamaru haramaki +1",hands={ name="Herculean Gloves", augments={'Phys. dmg. taken -4%','STR+8','Accuracy+4','Attack+5',}},ring1="Defending Ring",ring2="Patricius ring",
back="Solemnity Cape",waist="Flume Belt",legs="Mummu kecks +1",feet=gear.MovementFeet}
sets.idle.Town = {ammo="Togakushi shuriken",
head={ name="Herculean Helm", augments={'Phys. dmg. taken -4%','Accuracy+14','Attack+11',}},neck="Loricate torque +1",ear1="Genmei Earring",ear2="Infused Earring",
body="Councilor's garb",hands={ name="Herculean Gloves", augments={'Phys. dmg. taken -4%','STR+8','Accuracy+4','Attack+5',}},ring1="Defending Ring",ring2="Patricius ring",
back="Solemnity Cape",waist="Flume Belt",legs="Mummu kecks +1",feet=gear.MovementFeet}
sets.idle.Weak = {ammo="Togakushi shuriken",
head={ name="Herculean Helm", augments={'Phys. dmg. taken -4%','Accuracy+14','Attack+11',}},neck="Loricate torque +1",ear1="Genmei Earring",ear2="Infused Earring",
body="Hizamaru haramaki +1",hands={ name="Herculean Gloves", augments={'Phys. dmg. taken -4%','STR+8','Accuracy+4','Attack+5',}},ring1="Defending Ring",ring2="Patricius ring",
back="Solemnity Cape",waist="Flume Belt",legs="Mummu kecks +1",feet=gear.MovementFeet}
-- Defense sets
sets.defense.Evasion = {ammo="Togakushi shuriken",
head={ name="Herculean Helm", augments={'Phys. dmg. taken -4%','Accuracy+14','Attack+11',}},neck="Loricate torque +1",ear1="Genmei Earring",ear2="Infused Earring",
body="Hizamaru haramaki +1",hands={ name="Herculean Gloves", augments={'Phys. dmg. taken -4%','STR+8','Accuracy+4','Attack+5',}},ring1="Defending Ring",ring2="Patricius ring",
back="Solemnity Cape",waist="Flume Belt",legs="Mummu kecks +1",feet={ name="Herculean Boots", augments={'Accuracy+2','Phys. dmg. taken -5%','Attack+11',}}}
sets.defense.PDT = {ammo="Togakushi shuriken",
head={ name="Herculean Helm", augments={'Phys. dmg. taken -4%','Accuracy+14','Attack+11',}},neck="Loricate torque +1",ear1="Genmei Earring",ear2="Infused Earring",
body="Hizamaru haramaki +1",hands={ name="Herculean Gloves", augments={'Phys. dmg. taken -4%','STR+8','Accuracy+4','Attack+5',}},ring1="Defending Ring",ring2="Patricius ring",
back="Solemnity Cape",waist="Flume Belt",legs="Mummu kecks +1",feet={ name="Herculean Boots", augments={'Accuracy+2','Phys. dmg. taken -5%','Attack+11',}}}
sets.defense.MDT = {ammo="Togakushi shuriken",
head={ name="Herculean Helm", augments={'Phys. dmg. taken -4%','Accuracy+14','Attack+11',}},neck="Loricate torque +1",ear1="Genmei Earring",ear2="Infused Earring",
body="Hizamaru haramaki +1",hands={ name="Herculean Gloves", augments={'Phys. dmg. taken -4%','STR+8','Accuracy+4','Attack+5',}},ring1="Defending Ring",ring2="Patricius ring",
back="Solemnity Cape",waist="Flume Belt",legs="Mummu kecks +1",feet={ name="Herculean Boots", augments={'Accuracy+2','Phys. dmg. taken -5%','Attack+11',}}}
sets.Kiting = {feet=gear.MovementFeet}
--------------------------------------
-- 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 group
sets.engaged = {ammo="Togakushi shuriken",
head={ name="Herculean Helm", augments={'Attack+15','"Triple Atk."+4','Accuracy+11',}},neck="Clotharius torque",ear1="Suppanomimi",ear2="Cessance Earring",
body="Adhemar jacket",hands="Adhemar wristbands",ring1="Ilabrat Ring",ring2="Epona's Ring",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},waist="Kentarch belt +1",legs="Samnuha tights",feet={ name="Herculean Boots", augments={'Accuracy+21 Attack+21','"Triple Atk."+2','STR+5','Attack+13',}}}
sets.engaged.Acc = {ammo="Togakushi shuriken",
head={ name="Herculean Helm", augments={'Attack+15','"Triple Atk."+4','Accuracy+11',}},neck="Clotharius torque",ear1="Suppanomimi",ear2="Cessance Earring",
body="Adhemar jacket",hands="Adhemar wristbands",ring1="Ilabrat Ring",ring2="Epona's Ring",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},waist="Kentarch belt +1",legs="Samnuha tights",feet={ name="Herculean Boots", augments={'Accuracy+21 Attack+21','"Triple Atk."+2','STR+5','Attack+13',}}}
sets.engaged.Evasion = {ammo="Togakushi shuriken",
head={ name="Herculean Helm", augments={'Attack+15','"Triple Atk."+4','Accuracy+11',}},neck="Clotharius torque",ear1="Suppanomimi",ear2="Cessance Earring",
body="Adhemar jacket",hands="Adhemar wristbands",ring1="Ilabrat Ring",ring2="Epona's Ring",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},waist="Kentarch belt +1",legs="Samnuha tights",feet={ name="Herculean Boots", augments={'Accuracy+21 Attack+21','"Triple Atk."+2','STR+5','Attack+13',}}}
sets.engaged.PDT = {ammo="Togakushi shuriken",
head={ name="Herculean Helm", augments={'Phys. dmg. taken -4%','Accuracy+14','Attack+11',}},neck="Loricate torque +1",ear1="Suppanomimi",ear2="Cessance Earring",
body="Emet harness +1",hands={ name="Herculean Gloves", augments={'Phys. dmg. taken -4%','STR+8','Accuracy+4','Attack+5',}},ring1="Defending ring",ring2="Patricius ring",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},waist="Kentarch belt +1",legs="Mummu kecks +1",feet={ name="Herculean Boots", augments={'Accuracy+2','Phys. dmg. taken -5%','Attack+11',}}}
--------------------------------------
-- Custom buff sets
--------------------------------------
sets.buff.Migawari = {body="Iga Ningi +2"}
sets.buff.Doom = {ring2="Saida Ring"}
sets.buff.Yonin = {}
sets.buff.Innin = {}
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Run after the general 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 state.Buff.Doom then
equip(sets.buff.Doom)
end
end
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_aftercast(spell, action, spellMap, eventArgs)
if not spell.interrupted and spell.english == "Migawari: Ichi" then
state.Buff.Migawari = true
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)
-- If we gain or lose any haste buffs, adjust which gear set we target.
if S{'haste','march','embrava','haste samba'}:contains(buff:lower()) then
determine_haste_group()
handle_equipping_gear(player.status)
elseif state.Buff[buff] ~= nil then
handle_equipping_gear(player.status)
end
end
function job_status_change(new_status, old_status)
if new_status == 'Idle' then
select_movement_feet()
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Get custom spell maps
function job_get_spell_map(spell, default_spell_map)
if spell.skill == "Ninjutsu" then
if not default_spell_map then
if spell.target.type == 'SELF' then
return 'NinjutsuBuff'
else
return 'NinjutsuDebuff'
end
end
end
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if state.Buff.Migawari then
idleSet = set_combine(idleSet, sets.buff.Migawari)
end
if state.Buff.Doom then
idleSet = set_combine(idleSet, sets.buff.Doom)
end
return idleSet
end
-- Modify the default melee set after it was constructed.
function customize_melee_set(meleeSet)
if state.Buff.Migawari then
meleeSet = set_combine(meleeSet, sets.buff.Migawari)
end
if state.Buff.Doom then
meleeSet = set_combine(meleeSet, sets.buff.Doom)
end
return meleeSet
end
-- Called by the default 'update' self-command.
function job_update(cmdParams, eventArgs)
select_movement_feet()
determine_haste_group()
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
function determine_haste_group()
-- We have three groups of DW in gear: Hachiya body/legs, Iga head + Patentia Sash, and DW earrings
-- Standard gear set reaches near capped delay with just Haste (77%-78%, depending on HQs)
-- For high haste, we want to be able to drop one of the 10% groups.
-- Basic gear hits capped delay (roughly) with:
-- 1 March + Haste
-- 2 March
-- Haste + Haste Samba
-- 1 March + Haste Samba
-- Embrava
-- High haste buffs:
-- 2x Marches + Haste Samba == 19% DW in gear
-- 1x March + Haste + Haste Samba == 22% DW in gear
-- Embrava + Haste or 1x March == 7% DW in gear
-- For max haste (capped magic haste + 25% gear haste), we can drop all DW gear.
-- Max haste buffs:
-- Embrava + Haste+March or 2x March
-- 2x Marches + Haste
-- So we want four tiers:
-- Normal DW
-- 20% DW -- High Haste
-- 7% DW (earrings) - Embrava Haste (specialized situation with embrava and haste, but no marches)
-- 0 DW - Max Haste
classes.CustomMeleeGroups:clear()
if buffactive.embrava and (buffactive.march == 2 or (buffactive.march and buffactive.haste)) then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive.march == 2 and buffactive.haste then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive.embrava and (buffactive.haste or buffactive.march) then
classes.CustomMeleeGroups:append('EmbravaHaste')
elseif buffactive.march == 1 and buffactive.haste and buffactive['haste samba'] then
classes.CustomMeleeGroups:append('HighHaste')
elseif buffactive.march == 2 then
classes.CustomMeleeGroups:append('HighHaste')
end
end
function select_movement_feet()
if world.time >= 17*60 or world.time < 7*60 then
gear.MovementFeet.name = gear.NightFeet
else
gear.MovementFeet.name = gear.DayFeet
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'DNC' then
set_macro_page(4, 3)
elseif player.sub_job == 'THF' then
set_macro_page(5, 3)
else
set_macro_page(1, 3)
end
end
サーバ: Asura
Game: FFXI
Posts: 389
By Asura.Patriclis 2018-05-03 07:03:14
Looks like gearswap is only working for Utsusemi:San,When i cast Utsusemi: Ichi or Ni gearswap doesn't work, It won't change Precast and midcast gear. Any idea why is it working fine for San and not ichi/ni?
Here's my file:
I imagine it has something to do with job_get_spell_map
In the Mote-libs spell mappings, Ichi and Ni are mapped to the keyword "utsusemi". Meanwhile, San isn't linked to anything.
So your Job_get_spell_map is doing this
"Is utsusemi: san Ninjutsu?" YES
"Is utsusemi: san NOT in the default spell maps?" YES
"Is utsusemi: san targeting 'SELF'?" YES
"Okay then return NinjutsuBuff"
So you are using your NinjutsuBuff set for this (which is identical to your utsusemi set, which is why you think it's working the way you want it to, when it's actually not)
You can test my theory on this by changing your ninjutsuBuff set to something like
sets.midcast.NinjutsuBuff = {head="Glory Crown"}
If you start equipping a glory crown when casting utsusemi: san, you know im right, and you have to add utsusemi:san to the Mote-libs/Mote-Mappings.
As for getting ichi and ni to use Utsusemi set... I don't know why they're not working since you're basically using Kinematic's default NIN lua. I personally don't use Motelibs because it often does things in the background I don't want it doing... so I don't know enough about it to debug it at a glance.
Bahamut.Autobot
サーバ: Bahamut
Game: FFXI
Posts: 21
By Bahamut.Autobot 2018-05-03 11:29:12
anybody have a code for gearswap to equip a specific set when you change zones? i want to be able to equip my refresh set after i zone because it doesn't always switch you to it when u zone from a fight or dynamis, etc.
By Sidiov 2018-05-03 11:50:49
anybody have a code for gearswap to equip a specific set when you change zones? i want to be able to equip my refresh set after i zone because it doesn't always switch you to it when u zone from a fight or dynamis, etc. Code
windower.register_event('zone change', function()
--[[Code to trigger idle set activation here]]
handle_equipping_gear(player.status)
end)
Bahamut.Autobot
サーバ: Bahamut
Game: FFXI
Posts: 21
By Bahamut.Autobot 2018-05-03 14:43:07
anybody have a code for gearswap to equip a specific set when you change zones? i want to be able to equip my refresh set after i zone because it doesn't always switch you to it when u zone from a fight or dynamis, etc. Code
windower.register_event('zone change', function()
--[[Code to trigger idle set activation here]]
handle_equipping_gear(player.status)
end)
Thank you but im getting an user event error. is there anything special i need to do with that code?
i cant read the whole error, it runs off the screen.
By Sidiov 2018-05-03 15:00:20
anybody have a code for gearswap to equip a specific set when you change zones? i want to be able to equip my refresh set after i zone because it doesn't always switch you to it when u zone from a fight or dynamis, etc. Code
windower.register_event('zone change', function()
--[[Code to trigger idle set activation here]]
handle_equipping_gear(player.status)
end)
Thank you but im getting an user event error. is there anything special i need to do with that code?
i cant read the whole error, it runs off the screen.
I dont believe so, it does need to be outside any function.
Can you do console_log 1 in the console then grab the full error from the console.log in the Windower directory?
Bahamut.Autobot
サーバ: Bahamut
Game: FFXI
Posts: 21
By Bahamut.Autobot 2018-05-03 15:48:56
anybody have a code for gearswap to equip a specific set when you change zones? i want to be able to equip my refresh set after i zone because it doesn't always switch you to it when u zone from a fight or dynamis, etc. Code
windower.register_event('zone change', function()
--[[Code to trigger idle set activation here]]
handle_equipping_gear(player.status)
end)
Thank you but im getting an user event error. is there anything special i need to do with that code?
i cant read the whole error, it runs off the screen.
I dont believe so, it does need to be outside any function.
Can you do console_log 1 in the console then grab the full error from the console.log in the Windower directory?
yup. I just pasted the code at the very end of the LUA.
Gearswap:LUA runtime error: GearSwap/flow.lua:102:
User Event Error: ...Windower4\/addons/gearswap/data/Autobotnuggs_BLU.lua:1840: attempt to call global 'handle_equipping_gear' (a nil value)
By Brynach 2018-05-04 18:44:49
Is it possible to specify the back from which an item is selected in lua? For those times when two of the same item are used (for instance 2 of the same ring), and one will not equip.
By Sidiov 2018-05-04 20:35:20
anybody have a code for gearswap to equip a specific set when you change zones? i want to be able to equip my refresh set after i zone because it doesn't always switch you to it when u zone from a fight or dynamis, etc. Code
windower.register_event('zone change', function()
--[[Code to trigger idle set activation here]]
handle_equipping_gear(player.status)
end)
Thank you but im getting an user event error. is there anything special i need to do with that code?
i cant read the whole error, it runs off the screen.
I dont believe so, it does need to be outside any function.
Can you do console_log 1 in the console then grab the full error from the console.log in the Windower directory?
yup. I just pasted the code at the very end of the LUA.
Gearswap:LUA runtime error: GearSwap/flow.lua:102:
User Event Error: ...Windower4\/addons/gearswap/data/Autobotnuggs_BLU.lua:1840: attempt to call global 'handle_equipping_gear' (a nil value) oh just replace handle_equipping_gear with whatever you want to do, equip your idle set or something. That line is part of Mote's libraries.
Bismarck.Peipei
サーバ: Bismarck
Game: FFXI
Posts: 6
By Bismarck.Peipei 2018-05-07 09:28:00
This might have been asked before, but I'm using original Skillup.lua to level skills and I get this error everytime I cast something
Skillup.lua:665: Attempt to index global 'action' (a nil value)
Also after about 30 minutes or so it stops, typically after casting a summon. I can get it running again shortly after by releasing the summon. What might be wrong?
サーバ: Asura
Game: FFXI
Posts: 389
By Asura.Patriclis 2018-05-07 10:16:09
This might have been asked before, but I'm using original Skillup.lua to level skills and I get this error everytime I cast something
Skillup.lua:665: Attempt to index global 'action' (a nil value)
Also after about 30 minutes or so it stops, typically after casting a summon. I can get it running again shortly after by releasing the summon. What might be wrong?
Well the only Skillup.lua I know of only has 594 lines, and you're getting an error on line 665. So something about yours is different and thus not the 'original'.
And so to give you any idea of what's wrong with the file, you need to post the lua file so we can see it.
Bismarck.Peipei
サーバ: Bismarck
Game: FFXI
Posts: 6
By Bismarck.Peipei 2018-05-07 10:53:55
Code --[[How to use:
--this tool is set it and forget it you can leave it running for hours as long as se does not log you out it will keep running--
1.)place "skillup.lua" in your normal gearswap folder(where all your job files are)
2.)then us "gs l skillup.lua" to load this skill up in to gearswap
3.) on lines 22 and 25 of this file you can put in you wind and string instruments
to start Geomancy magic skillup use command "gs c startgeo"
to start Healing magic skillup use command "gs c starthealing"
to start Enhancing magic skillup use command "gs c startenhancing"
to start Ninjutsu magic skillup use command "gs c startninjutsu"
to start Singing magic skillup use command "gs c startsinging"
to start Blue magic skillup use command "gs c startblue"
to start Summoning magic skillup use command "gs c startsmn"
to stop all skillups use command "gs c skillstop"
to auto shutdown after skillup use command "gs c aftershutdown"
to auto logoff after skillup use command "gs c afterlogoff"
to just stop and stay logged on after skillup use command "gs c afterStop"(only needed if you use one of the above auto shutdown/logoff)
much thanks to Arcon,Byrth,Mote,and anybody else i forgot for the help in making this]]
require 'actions'
function get_sets()
skilluprun = false
sets.brd = {}
sets.brd.wind = {
range="Linos"--put your wind instrument here
}
sets.brd.string = {
range="Terpander"--put your string instrument here
}
skilluptype = {"Geomancy","Healing","Enhancing","Ninjutsu","Singing","Blue","Summoning"}
skillupcount = 1
geospells = {"Indi-Acumen","Indi-AGI","Indi-Attunement","Indi-Barrier","Indi-CHR","Indi-DEX","Indi-Fade","Indi-Fend","Indi-Focus","Indi-Frailty","Indi-Fury","Indi-Gravity","Indi-Haste","Indi-INT","Indi-Languor","Indi-Malaise","Indi-MND","Indi-Paralysis","Indi-Poison","Indi-Precision","Indi-Refresh","Indi-Regen","Indi-Slip","Indi-Slow","Indi-STR","Indi-Torpor","Indi-Vex","Indi-VIT","Indi-Voidance","Indi-Wilt"}
geocount = 1
healingspells = {"Blindna","Cura","Cura II","Cura III","Curaga","Curaga II","Curaga III","Curaga IV","Curaga V","Cure","Cure II","Cure III","Cure IV","Cure V","Cure VI","Cursna","Esuna","Paralyna","Poisona","Reraise","Reraise II","Reraise III","Silena","Stona","Viruna"}
healingcount = 1
enhancespells = {"Adloquium","Animus Augeo","Animus Minuo","Aquaveil","Aurorastorm","Auspice","Baraera","Baraero","Baramnesia","Baramnesra","Barblind","Barblindra","Barblizzara","Barblizzard","Barfira","Barfire","Barparalyze","Barparalyzra","Barpetra","Barpetrify","Barpoison","Barpoisonra","Barsilence","Barsilencera","Barsleep","Barsleepra","Barstone","Barstonra","Barthunder","Barthundra","Barvira","Barvirus","Barwater","Barwatera","Blaze Spikes","Blink","Boost-AGI","Boost-CHR","Boost-DEX","Boost-INT","Boost-MND","Boost-STR","Boost-VIT","Crusade","Deodorize","Embrava","Enaero","Enaero II","Enblizzard","Enblizzard II","Enfire","Enfire II","Enstone","Enstone II","Enthunder","Enthunder II","Enwater","Enwater II","Erase","Escape","Firestorm","Foil","Gain-AGI","Gain-CHR","Gain-DEX","Gain-INT","Gain-MND","Gain-STR","Gain-VIT","Hailstorm","Haste","Ice Spikes","Invisible","Phalanx","Phalanx II","Protect","Protect II","Protect III","Protect IV","Protect V","Protectra","Protectra II","Protectra III","Protectra IV","Protectra V","Rainstorm","Refresh","Refresh II","Regen","Regen II","Regen III","Regen IV","Regen V","Reprisal","Sandstorm","Shell","Shell II","Shell III","Shell IV","Shell V","Shellra","Shellra II","Shellra III","Shellra IV","Shellra V","Shock Spikes","Sneak","Stoneskin","Temper","Thunderstorm","Voidstorm","Windstorm"}
enhancecount = 1
ninspells = {"Gekka: Ichi","Kakka: Ichi","Migawari: Ichi","Monomi: Ichi","Myoshu: Ichi","Tonko: Ichi","Tonko: Ni","Utsusemi: Ichi","Utsusemi: Ni","Yain: Ichi","Yain: Ichi","Gekka: Ichi"}
nincount = 1
nincant = {}
nincantcount = 0
if player.main_job == "NIN" or player.sub_job == "NIN" then
ninspellitem = S{
["Doton: Ichi"] = "Makibishi",
["Doton: Ni"] = "Makibishi",
["Doton: San"] = "Makibishi",
["Huton: Ichi"] = "Kawahori-Ogi",
["Huton: Ni"] = "Kawahori-Ogi",
["Huton: San"] = "Kawahori-Ogi",
["Hyoton: Ichi"] = "Tsurara",
["Hyoton: Ni"] = "Tsurara",
["Hyoton: San"] = "Tsurara",
["Katon: Ichi"] = "Uchitake",
["Katon: Ni"] = "Uchitake",
["Katon: San"] = "Uchitake",
["Raiton: Ichi"] = "Hiraishin",
["Raiton: Ni"] = "Hiraishin",
["Raiton: San"] = "Hiraishin",
["Suiton: Ichi"] = "Mizu-Deppo",
["Suiton: Ni"] = "Mizu-Deppo",
["Suiton: San"] = "Mizu-Deppo",
["Kakka: Ichi"] = "Ryuno",
["Migawari: Ichi"] = "Mokujin",
["Monomi: Ichi"] = "Sanjaku-Tenugui",
["Myoshu: Ichi"] = "Kabenro",
["Tonko: Ichi"] = "Shinobi-Tabi",
["Tonko: Ni"] = "Shinobi-Tabi",
["Tonko: San"] = "Shinobi-Tabi",
["Utsusemi: Ichi"] = "Shihei",
["Utsusemi: Ni"] = "Shihei",
["Utsusemi: San"] = "Shihei",
["Aisha: Ichi"] = "Soshi",
["Dokumori: Ichi"] = "Kodoku",
["Dokumori: Ni"] = "Kodoku",
["Dokumori: San"] = "Kodoku",
["Hojo: Ichi"] = "Kaginawa",
["Hojo: Ni"] = "Kaginawa",
["Hojo: San"] = "Kaginawa",
["Jubaku: Ichi"] = "Jusatsu",
["Jubaku: Ni"] = "Jusatsu",
["Jubaku: San"] = "Jusatsu",
["Kurayami: Ichi"] = "Sairui-Ran",
["Kurayami: Ni"] = "Sairui-Ran",
["Kurayami: San"] = "Sairui-Ran",
["Yurin: Ichi"] = "Jinko",
["Gekka: Ichi"] = "Ranka",
["Yain: Ichi"] = "Furusumi",
}
ninplustool = S{
["Makibishi"] = "Inoshishinofuda",
["Kawahori-Ogi"] = "Inoshishinofuda",
["Tsurara"] = "Inoshishinofuda",
["Uchitake"] = "Inoshishinofuda",
["Hiraishin"] = "Inoshishinofuda",
["Mizu-Deppo"] = "Inoshishinofuda",
["Ryuno"] = "Shikanofuda",
["Mokujin"] = "Shikanofuda",
["Sanjaku-Tenugui"] = "Shikanofuda",
["Kabenro"] = "Shikanofuda",
["Shinobi-Tabi"] = "Shikanofuda",
["Shihei"] = "Shikanofuda",
["Soshi"] = "Chonofuda",
["Kodoku"] = "Chonofuda",
["Kaginawa"] = "Chonofuda",
["Jusatsu"] = "Chonofuda",
["Sairui-Ran"] = "Chonofuda",
["Jinko"] = "Chonofuda",
["Ranka"] = "Ranka",
["Furusumi"] = "Furusumi",
}
nintoolbag = S{
["Makibishi"] = "Toolbag (Maki)",
["Kawahori-Ogi"] = "Toolbag (Kawa)",
["Tsurara"] = "Toolbag (Tsura)",
["Uchitake"] = "Toolbag (Uchi)",
["Hiraishin"] = "Toolbag (Hira)",
["Mizu-Deppo"] = "Toolbag (Mizu)",
["Ryuno"] = "Toolbag (Ryuno)",
["Mokujin"] = "Toolbag (Moku)",
["Sanjaku-Tenugui"] = "Toolbag (Sanja)",
["Kabenro"] = "Toolbag (Kabenro)",
["Shinobi-Tabi"] = "Toolbag (Shino)",
["Shihei"] = "Toolbag (Shihei)",
["Soshi"] = "Toolbag (Soshi)",
["Kodoku"] = "Toolbag (Kodo)",
["Kaginawa"] = "Toolbag (Kagi)",
["Jusatsu"] = "Toolbag (Jusa)",
["Sairui-Ran"] = "Toolbag (Sai)",
["Jinko"] = "Toolbag (Jinko)",
["Inoshishinofuda"] = "Toolbag (Ino)",
["Shikanofuda"] = "Toolbag (Shika)",
["Chonofuda"] = "Toolbag (Cho)",
["Ranka"] = "Toolbag (Ranka)",
["Furusumi"] = "Toolbag (Furu)",
}
toolbagtoid = {
["Toolbag (Uchi)"] = 5308,
["Toolbag (Tsura)"] = 5309,
["Toolbag (Kawa)"] = 5310,
["Toolbag (Maki)"] = 5311,
["Toolbag (Hira)"] = 5312,
["Toolbag (Mizu)"] = 5313,
["Toolbag (Shihe)"] = 5314,
["Toolbag (Jusa)"] = 5315,
["Toolbag (Kagi)"] = 5316,
["Toolbag (Sai)"] = 5317,
["Toolbag (Kodo)"] = 5318,
["Toolbag (Shino)"] = 5319,
["Toolbag (Sanja)"] = 5417,
["Toolbag (Soshi)"] = 5734,
["Toolbg. (Kaben)"] = 5863,
["Toolbag (Jinko)"] = 5864,
["Toolbag (Ryuno)"] = 5865,
["Toolbag (Moku)"] = 5866,
["Toolbag (Ino)"] = 5867,
["Toolbag (Shika)"] = 5868,
["Toolbag (Cho)"] = 5869,
["Toolbag (Ranka)"] = 6265,
["Toolbag (Furu)"] = 6266,
}
tbid = 0
end
songspells = {"Knight's Minne","Advancing March","Adventurer's Dirge","Archer's Prelude","Army's Paeon","Army's Paeon II","Army's Paeon III","Army's Paeon IV","Army's Paeon V","Army's Paeon VI","Bewitching Etude","Blade Madrigal","Chocobo Mazurka","Dark Carol","Dark Carol II","Dextrous Etude","Dragonfoe Mambo","Earth Carol","Earth Carol II","Enchanting Etude","Fire Carol","Fire Carol II","Foe Sirvente","Fowl Aubade","Goblin Gavotte","Goddess's Hymnus","Gold Capriccio","Herb Pastoral","Herculean Etude","Hunter's Prelude","Ice Carol","Ice Carol II","Knight's Minne II","Knight's Minne III","Knight's Minne IV","Knight's Minne V","Learned Etude","Light Carol","Light Carol II","Lightning Carol","Lightning Carol II","Logical Etude","Mage's Ballad","Mage's Ballad II","Mage's Ballad III","Puppet's Operetta","Quick Etude","Raptor Mazurka","Sage Etude","Scop's Operetta","Sentinel's Scherzo","Sheepfoe Mambo","Shining Fantasia","Sinewy Etude","Spirited Etude","Swift Etude","Sword Madrigal","Uncanny Etude","Valor Minuet","Valor Minuet II","Valor Minuet III","Valor Minuet IV","Valor Minuet V","Victory March","Vital Etude","Vivacious Etude","Warding Round","Water Carol","Water Carol II","Wind Carol","Wind Carol II"}
songcount = 1
bluspells = {"Pollen","Wild Carrot","Refueling","Feather Barrier","Magic Fruit","Diamondhide","Warm-Up","Amplification","Triumphant Roar","Saline Coat","Reactor Cool","Plasma Charge","Plenilune Embrace","Regeneration","Animating Wail","Battery Charge","Magic Barrier","Fantod","Winds of Promy.","Barrier Tusk","White Wind","Harden Shell","O. Counterstance","Pyric Bulwark","Nat. Meditation","Carcharian Verve","Healing Breeze"}
bluspellul = S{"Harden Shell","Thunderbolt","Absolute Terror","Gates of Hades","Tourbillion","Pyric Bulwark","Bilgestorm","Bloodrake","Droning Whirlwind","Carcharian Verve","Blistering Roar"}
ulid = S{
["Harden Shell"] = 737,
["Thunderbolt"] = 736,
["Absolute Terror"] = 738,
["Gates of Hades"] = 739,
["Tourbillion"] = 740,
["Pyric Bulwark"] = 741,
["Bilgestorm"] = 742,
["Bloodrake"] = 743,
["Droning Whirlwind"] = 744,
["Carcharian Verve"] = 745,
["Blistering Roar"] = 746,
}
blucount = 1
smnspells = {"Carbuncle","Cait Sith","Diabolos","Fenrir","Garuda","Ifrit","Leviathan","Ramuh","Shiva","Titan","Air Spirit","Dark Spirit","Earth Spirit","Fire Spirit","Ice Spirit","Light Spirit","Thunder Spirit","Water Spirit"}
smncount = 1
sets.Idle = {
main="Dark Staff",
left_ear="Relaxing Earring",
right_ear="Liminus Earring",
}
shutdown = false
logoff = false
healingcap = false
enhancingcap = false
summoningcap = false
ninjutsucap = false
singingcap = false
stringcap = false
windcap = false
bluecap = false
geomancycap = false
handbellcap = false
add_to_chat(123,"Skill Up Loaded")
end
function status_change(new,old)
if new=='Idle' then
equip(sets.Idle)
if skilluptype[skillupcount] == "Geomancy" and skilluprun then
send_command('wait 1.0;input /ma "'..geospells[geocount]..'" <me>')
elseif skilluptype[skillupcount] == "Healing" and skilluprun then
send_command('wait 1.0;input /ma "'..healingspells[healingcount]..'" <me>')
elseif skilluptype[skillupcount] == "Enhancing" and skilluprun then
send_command('wait 1.0;input /ma "'..enhancespells[enhancecount]..'" <me>')
elseif skilluptype[skillupcount] == "Ninjutsu" and skilluprun then
send_command('wait 1.0;input /ma "'..ninspells[nincount]..'" <me>')
elseif skilluptype[skillupcount] == "Singing" and skilluprun then
send_command('wait 1.0;input /ma "'..songspells[songcount]..'" <me>')
elseif skilluptype[skillupcount] == "Blue" and skilluprun then
send_command('wait 1.0;input /ma "'..bluspells[blucount]..'" <me>')
elseif skilluptype[skillupcount] == "Summoning" and skilluprun then
send_command('wait 1.0;input /ma "'..smnspells[smncount]..'" <me>')
end
end
end
function filtered_action(spell)
if spell.type == "Geomancy" and skilluprun then
cancel_spell()
if geocount < 30 then
geocount = geocount +1
else
geocount = 1
end
send_command('input /ma "'..geospells[geocount]..'" <me>')
return
elseif spell.skill == "Healing Magic" and skilluprun then
cancel_spell()
if healingcount < 25 then
healingcount = healingcount +1
else
healingcount = 1
end
send_command('input /ma "'..healingspells[healingcount]..'" <me>')
return
elseif spell.skill == "Enhancing Magic" and skilluprun then
cancel_spell()
if enhancecount < 112 then
enhancecount = enhancecount +1
else
enhancecount = 1
end
send_command('input /ma "'..enhancespells[enhancecount]..'" <me>')
return
elseif spell.skill == "Ninjutsu" and skilluprun then
cancel_spell()
nin_tool_check(spell)
elseif spell.skill == "Singing" and skilluprun then
cancel_spell()
if songcount < 71 then
songcount = songcount +1
else
songcount = 1
end
send_command('input /ma "'..songspells[songcount]..'" <me>')
return
elseif spell.skill == "Blue Magic" and skilluprun then
cancel_spell()
if blucount < 27 then
blucount = blucount +1
else
blucount = 1
end
send_command('input /ma "'..bluspells[blucount]..'" <me>')
return
elseif spell.type == "SummonerPact" and skilluprun then
cancel_spell()
if smncount < 18 then
smncount = smncount +1
else
smncount = 1
end
send_command('input /ma "'..smnspells[smncount]..'" <me>')
return
elseif spell.name == "Unbridled Learning" then
cancel_spell()
if blucount < 27 then
blucount = blucount +1
else
blucount = 1
end
send_command('input /ma "'..bluspells[blucount]..'" <me>')
return
elseif spell.name == "Avatar's Favor" then
cancel_spell()
send_command('input /ja "Release" <me>')
return
end
end
function precast(spell)
if spell then
if spell.mp_cost > player.mp then
cancel_spell()
send_command('input /heal on')
return
end
end
if spell.type == "Geomancy" and skilluprun then
if not windower.ffxi.get_spells()[spell.id] then
cancel_spell()
if geocount < 30 then
geocount = geocount +1
else
geocount = 1
end
send_command('input /ma "'..geospells[geocount]..'" <me>')
return
elseif geocount < 30 then
geocount = geocount +1
else
geocount = 1
end
elseif spell.skill == "Healing Magic" and skilluprun then
if not windower.ffxi.get_spells()[spell.id] then
cancel_spell()
if healingcount < 25 then
healingcount = healingcount +1
else
healingcount = 1
end
send_command('input /ma "'..healingspells[healingcount]..'" <me>')
return
elseif healingcount < 25 then
healingcount = healingcount +1
else
healingcount = 1
end
elseif spell.skill == "Enhancing Magic" and skilluprun then
if not windower.ffxi.get_spells()[spell.id] then
cancel_spell()
if enhancecount < 112 then
enhancecount = enhancecount +1
else
enhancecount = 1
end
send_command('input /ma "'..enhancespells[enhancecount]..'" <me>')
return
elseif enhancecount < 112 then
enhancecount = enhancecount +1
else
enhancecount = 1
end
elseif spell.skill == "Ninjutsu" and skilluprun then
if not windower.ffxi.get_spells()[spell.id] then
cancel_spell()
if nincount < 12 then
nincount = nincount +1
else
nincount = 1
end
send_command('input /ma "'..ninspells[nincount]..'" <me>')
return
elseif nincount < 12 then
nincount = nincount +1
else
nincount = 1
end
elseif spell.skill == "Singing" and skilluprun then
if not stringcap then
equip(sets.brd.string)
elseif not windcap then
equip(sets.brd.wind)
end
if not windower.ffxi.get_spells()[spell.id] then
cancel_spell()
if songcount < 71 then
songcount = songcount +1
else
songcount = 1
end
send_command('input /ma "'..songspells[songcount]..'" <me>')
return
elseif songcount < 71 then
songcount = songcount +1
else
songcount = 1
end
elseif spell.skill == "Blue Magic" and skilluprun then
if not windower.ffxi.get_spells()[spell.id] then
cancel_spell()
if blucount < 27 then
blucount = blucount +1
else
blucount = 1
end
send_command('input /ma "'..bluspells[blucount]..'" <me>')
return
elseif blucount < 27 then
blucount = blucount +1
else
blucount = 1
end
elseif spell.type == "SummonerPact" and skilluprun then
if not windower.ffxi.get_spells()[spell.id] then
cancel_spell()
if smncount < 18 then
smncount = smncount +1
else
smncount = 1
end
send_command('input /ma "'..smnspells[smncount]..'" <me>')
return
elseif smncount < 18 then
smncount = smncount +1
else
smncount = 1
end
end
if spell.name == "Avatar's Favor" then
if (windower.ffxi.get_ability_recasts()[spell.recast_id] > 0) or buffactive["Avatar's Favor"] then
cancel_spell()
send_command('input /ja "Release" <me>')
return
end
elseif spell.name == "Elemental Siphon" then
if (windower.ffxi.get_ability_recasts()[spell.recast_id] > 0) or player.mpp > 75 then
cancel_spell()
send_command('input /ja "Release" <me>')
return
end
elseif spell.name == "Unbridled Learning" then
if bluspellul:contains(bluspells[blucount]) and not windower.ffxi.get_spells()[ulid[bluspells[blucount]]] then
if not buffactive["Unbridled Learning"] then
if (windower.ffxi.get_ability_recasts()[spell.recast_id] > 0) then
cancel_spell()
if blucount < 27 then
blucount = blucount +1
else
blucount = 1
end
send_command('input /ma "'..bluspells[blucount]..'" <me>')
return
end
end
else
cancel_spell()
if blucount < 27 then
blucount = blucount +1
else
blucount = 1
end
send_command('input /ma "'..bluspells[blucount]..'" <me>')
return
end
end
if spell.name == "Release" then
if not pet.isvalid then
cancel_spell()
send_command('input /heal on')
return
end
if (windower.ffxi.get_ability_recasts()[spell.recast_id] > 0) then
cancel_spell()
send_command('wait 2.0;input /ja "Release" <me>')
return
end
end
end
function aftercast(spell)
if skilluprun then
if spell.type == "Geomancy" then
if geomancycap and handbellcap then
skilluprun = false
shutdown_logoff()
return
end
send_command('wait 3.0;input /ma "'..geospells[geocount]..'" <me>')
elseif spell.skill == "Healing Magic" then
if healingcap then
skilluprun = false
shutdown_logoff()
return
end
send_command('wait 3.0;input /ma "'..healingspells[healingcount]..'" <me>')
elseif spell.skill == "Enhancing Magic" then
if enhancingcap then
skilluprun = false
shutdown_logoff()
return
end
send_command('wait 3.0;input /ma "'..enhancespells[enhancecount]..'" <me>')
elseif spell.skill == "Ninjutsu" then
if ninjutsucap then
skilluprun = false
shutdown_logoff()
return
end
send_command('wait 3.0;input /ma "'..ninspells[nincount]..'" <me>')
elseif spell.skill == "Singing" then
if singingcap and stringcap and windcap then
skilluprun = false
shutdown_logoff()
return
end
send_command('wait 3.0;input /ma "'..songspells[songcount]..'" <me>')
elseif spell.skill == "Blue Magic" then
if bluecap then
skilluprun = false
shutdown_logoff()
return
end
send_command('wait 3.5;input /ja "Unbridled Learning" <me>')
elseif spell.type == "SummonerPact" then
if summoningcap then
skilluprun = false
send_command('wait 6.0;input /ja "Release" <me>')
return
end
if spell.name:contains('Spirit') then
send_command('wait 6.0;input /ja "Elemental Siphon" <me>')
else
send_command('wait 6.0;input /ja "Avatar\'s Favor" <me>')
end
elseif spell.name == "Release" then
send_command('wait 3.0;input /ma "'..smnspells[smncount]..'" <me>')
elseif spell.name == "Avatar's Favor" then
send_command('wait 3.0;input /ja "Release" <me>')
elseif spell.name == "Elemental Siphon" then
send_command('wait 3.0;input /ja "Release" <me>')
elseif spell.name == "Unbridled Learning" then
send_command('wait 1.0;input /ma "'..bluspells[blucount]..'" <me>')
end
elseif spell.type == "SummonerPact" then
if summoningcap then
skilluprun = false
send_command('wait 3.0;input /ja "Release" <me>')
return
end
if spell.name:contains('Spirit') then
send_command('wait 6.0;input /ja "Elemental Siphon" <me>')
else
send_command('wait 6.0;input /ja "Avatar\'s Favor" <me>')
end
elseif spell.name == "Release" then
if summoningcap then
shutdown_logoff()
return
end
if pet and pet.isvalid then
send_command('wait 4.0;input /ja "Release" <me>')
end
elseif spell.name == "Avatar's Favor" then
send_command('wait 3.0;input /ja "Release" <me>')
end
end
function self_command(command)
if command == "startgeo" then
skilluprun = true
skillupcount = 1
send_command('wait 1.0;input /ma "'..geospells[geocount]..'" <me>')
add_to_chat(123,"Starting Geomancy Skill up")
end
if command == "starthealing" then
skilluprun = true
skillupcount = 2
send_command('wait 1.0;input /ma "'..healingspells[healingcount]..'" <me>')
add_to_chat(123,"Starting Healing Skill up")
end
if command == "startenhancing" then
skilluprun = true
skillupcount = 3
send_command('wait 1.0;input /ma "'..enhancespells[enhancecount]..'" <me>')
add_to_chat(123,"Starting Enhancing Skill up")
end
if command == "startninjutsu" then
skilluprun = true
skillupcount = 4
send_command('wait 1.0;input /ma "'..ninspells[nincount]..'" <me>')
add_to_chat(123,"Starting Ninjutsu Skill up")
end
if command == "startsinging" then
skilluprun = true
skillupcount = 5
send_command('wait 1.0;input /ma "'..songspells[songcount]..'" <me>')
add_to_chat(123,"Starting Singing Skill up")
end
if command == "startblue" then
skilluprun = true
skillupcount = 6
send_command('wait 1.0;input /ma "'..bluspells[blucount]..'" <me>')
add_to_chat(123,"Starting Blue Magic Skill up")
end
if command == "startsmn" then
skilluprun = true
skillupcount = 7
send_command('wait 2.0;input /ma "'..smnspells[smncount]..'" <me>')
add_to_chat(123,"Starting Summoning Skill up")
end
if command == "skillstop" then
skilluprun = false
add_to_chat(123,"Stopping Skill up")
end
if command == 'aftershutdown' then
shutdown = true
logoff = false
add_to_chat(123, '----- Will Shutdown When Skillup Done -----')
end
if command == 'afterlogoff' then
shutdown = false
logoff = true
add_to_chat(123, '----- Will Logoff When Skillup Done -----')
end
if command == 'afterStop' then
shutdown = false
logoff = false
add_to_chat(123, '----- Will Stop When Skillup Done -----')
end
end
function shutdown_logoff()
add_to_chat(123,"Auto stop skillup")
if logoff then
send_command('wait 3.0;input /logoff')
elseif shutdown then
send_command('wait 3.0;input /shutdown')
end
end
function nin_tool_check(spell)
if spell.type == "Ninjutsu" then
local tool = ninspellitem[spell.name]
local stool = ninplustool[tool]
local toolbag = nintoolbag[tool]
local stoolbag = nintoolbag[stool]
if not nincant:contains(spell.name)then
if not (player.inventory == tool or player.inventory == stool) then
cancel_spell()
if player.inventory == toolbag then
tbid = toolbagtoid[toolbag]
send_command('input /item "'..toolbag..'" <me>')
elseif player.inventory == stoolbag then
tbid = toolbagtoid[stoolbag]
send_command('input /item "'..stoolbag..'" <me>')
else
nincant:append(spell.name)
nincantcount = nincantcount +1
end
if nincount < 12 then
nincount = nincount +1
else
nincount = 1
end
send_command('input /ma "'..ninspells[nincount]..'" <me>')
return
end
elseif nincantcount < 12 then
if nincount < 12 then
nincount = nincount +1
else
nincount = 1
end
send_command('input /ma "'..ninspells[nincount]..'" <me>')
return
else
skilluprun = false
add_to_chat(123,"You Have No More Of The Tools Needed For Castin of NIN Spells\nStoping NIN Skillup")
return
end
end
end
function event_action(act)
action = Action(act)
if action:get_category_string() == 'item_finish' then
if action.raw.param == tbid and player.id == action.raw.actor_id then
send_command('wait 1.0;input /ma "'..ninspells[nincount]..'" <me>')
tbid = 0
end
end
end
windower.raw_register_event('action', event_action)
function skill_capped(id, data, modified, injected, blocked)
if id == 0x062 then
healingcap = data:unpack('q', 0xC4, 8)
enhancingcap = data:unpack('q', 0xC6, 8)
summoningcap = data:unpack('q', 0xCE, 8)
ninjutsucap = data:unpack('q', 0xD0, 8)
singingcap = data:unpack('q', 0xD2, 8)
stringcap = data:unpack('q', 0xD4, 8)
windcap = data:unpack('q', 0xD6, 8)
bluecap = data:unpack('q', 0xD8, 8)
geomancycap = data:unpack('q', 0xDA, 8)
handbellcap = data:unpack('q', 0xDC, 8)
end
if id == 0x0DF then
if data:unpack('I', 0x0D) == player.max_mp and skilluprun then
windower.send_command('input /heal off')
end
end
end
windower.raw_register_event('incoming chunk', skill_capped)
Bismarck.Peipei
サーバ: Bismarck
Game: FFXI
Posts: 6
By Bismarck.Peipei 2018-05-07 10:58:25
Line 665 is actually this part, it is not formatted correctly in the post.
function event_action(act)
action = Action(act)
if action:get_category_string() == 'item_finish' then
if action.raw.param == tbid and player.id == action.raw.actor_id then
send_command('wait 1.0;input /ma "'..ninspells[nincount]..'" <me>')
tbid = 0
end
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.
|
|