|
GearSwap for Dummies!
Server: Asura
Game: FFXI
Posts: 415
By Asura.Cambion 2014-02-04 00:56:37
Work in Progress...
Alright... as a follow up to my Spellcast for Dummies, here is the next stage in Dancer Technology Evolution Stuff...
I don't know much at all about GearSwap, but I've figured out how to get it to do what my old Spellcast use to do, as well as surpass it's usefulness in many other areas. It's also quicker, but probably the most impressive thing, to me at least, is that because Dancer can so easily hit the delay cap, Gearswap can and does, automatically change your gear each time a specified buff is active or wears off.
So, for example, A Victory March + Haste Samba is already enough for a Dancer to hit the cap. Because of this, you'll gain more Damage, by removing Dual Wield gear, and a more beneficial stat, since Dual Wield is no longer making you attack faster, because you've reached the cap.
Anywho, long story short, when it recognizes that Victory March has been cast on you, it will trigger your 'High Haste' gear set, without any input or command from you.
So, I'm going to start with the basics, which means I'll talk to you as if you were a child, because when it comes to all of this coding, that's how I wish people would explain it to me!
Step 0: Stuff I assume everyone has, but just in case...
A: Windower 4
Download Here: http://www.windower.net/
This is the program that makes all of the fancy applications work.
B: Notepad ++
Download Here: http://notepad-plus-plus.org/
This is the program that you use to actually create and edit the 'code' that spellcast uses and runs off of. For all intents and purposes, it's no more than a word document really.
Step 1: Obtaining Gearswap
Open Windower as usual. Before selecting a Profile, click “Addons”, scroll down until you see “GearSwap” and click the Download Button. Afterwards, ensure the Toggle Switch in in the “On” position, and then start FFXI as you always do.
Step 2: File Management
I use Windows 7, other Operating Systems may be slightly different, but should be close.
Right Click ‘Start’
Select “Windows Explorer”
Local Disk C:
Program Files (x86)
Windower4
Addons
GearSwap
Data
Once in the Data Folder, there should only be the ‘Instructions’ text file. (If I recall correctly)
From here, we now need to acquire Motenten’s Fancy Magic Files and place them into this “Data” folder.
They can be found at this link: https://github.com/Kinematics/GearSwap-Jobs
At the link above, there are 5 files you absolutely need.
You can either download them, or create new files within Notepad++, Copy/Paste and save them the exact way he has them listed.
The First 5 files you need are:
Mote-Globals
Mote-Include
Mote-Mappings
Mote-SelfCommands
Mote-Utility
And for us Dancers also:
Dnc
They all need to be labeled exactly as above, and saved as .lua files.
You do NOT alter these you your characters name, they will remain Mote- forever.
*The Dnc.lua file you can alter to your character’s name. This is only technically necessary if you use multiple characters but Cambion_Dnc will work, just like the plain Dnc will.
Step 2 (b): File Management Part 2
From there, we will now right click the “Dnc.lua” file and select “Open With Notepad++”
Once inside, you’ll now be able to view Mote’s Dnc “gearswap”. This .lua file has all of the Job Specific stuff related to Dnc as well as gear sets, rules, triggers, etc etc. The previous 5 files have… all sorts of stuff that’s far beyond my comprehension, but that apply to all of the jobs in the game and are universal. I recommend you don’t worry about them for now.
From the file as is today (2/3/14) you’ll want to scroll down to line 67.
In case the lines get pushed up/down over time, you’re looking for the following text: Code --------------------------------------
-- Start defining the sets
--------------------------------------
From here, you want to Highlight from the beginning of line 67 all the way down to line 303.
For those reading at a later date, you’re looking for the very first line, that simply says “end” and you want to stop just ABOVE the “end”. DO NOT include the “end” in your copy/paste. This is very important, and it can/will/has caused issues.
Every thing you’ve highlighted should be the numerous gearsets that we’ll be able to alter to our preference down the road. For the time being ‘Copy’ the entire text, and then ‘Delete’ it from the current file.
Create a new Notepad++ file and “Paste” what you just copy/deleted from the original Dnc.lua.
Now save this file as Dnc_Gear as a lua file. Alternatively, if you decided to use your character name, you’ll want to save this as Cambion_Dnc_Gear.
So in your Data file you should either have
A: Cambion_Dnc & Cambion_Dnc_Gear
or
B: Dnc & Dnc_Gear
both as lua files, along with the initial 5 files from Step 2 (a)
What we’ve just done, is separate our “gear” from our actual programming file.
I recommend doing this, so that any time there is an update to gearswap, that requires you to download the newest Dnc.lua from Mote’s files, you’ll be able to simply remove his gear sets, and continue using the one’s you’ve already customized.
Server: Asura
Game: FFXI
Posts: 415
By Asura.Cambion 2014-02-04 00:56:42
Part 2
Temporary, but for those who want a headstart in the gear customizing, here's my Dnc_Gear file. It's not top notch, but it's a bit more current with some of the newer gear than the one you may have copy/pasted from Mote.
Code sets.precast.JA['No Foot Rise'] = {body="Etoile Casaque +2"}
sets.precast.JA['Trance'] = {head="Etoile Tiara +2"}
-- Waltz set (chr and vit)
sets.precast.Waltz = {ammo="Charis Feather",
head="Anwig Salade",neck="Charis Necklace",lear="Suppanomimi",rear="Roundel Earring",
body="Maxixi Casaque",hands="Maxixi Bangles +1",lring="Asklepian Ring",rring="Valseur's Ring",
back="Toetapper Mantle",waist="Patentia Sash",legs="Quiahuiz Leggings",feet="Maxixi Toeshoes"}
sets.precast.Waltz.Idle = set_combine(sets.precast.Waltz, {head="Etoile Tiara +2"})
sets.precast.Waltz['Healing Waltz'] = {head="Anwig Salade"}
sets.precast.Samba = {head="Maxixi Tiara"}
sets.precast.Jig = {legs="Etoile Tights +2", feet="Maxixi Toeshoes"}
sets.precast.Step = {head="Maxixi Tiara", back="Toetapper Mantle"}
sets.precast.Step['Feather Step'] = {feet="Charis Shoes +2"}
sets.precast.Flourish1 = {}
sets.precast.Flourish1['Violent Flourish'] = {ear1="Psystorm Earring",ear2="Lifestorm Earring",
body="Etoile Casaque +2",ring2="Sangoma Ring",feet="Iuitl Gaiters"} -- magic accuracy
sets.precast.Flourish1['Desperate Flourish'] = {} -- acc gear
sets.precast.Flourish2 = {}
sets.precast.Flourish2['Reverse Flourish'] = {hands="Charis Bangles +2"}
sets.precast.Flourish3 = {}
sets.precast.Flourish3['Striking Flourish'] = {body="Charis Casaque +2"}
sets.precast.Flourish3['Climactic Flourish'] = {head="Charis Tiara +2"}
-- Fast cast sets for spells
sets.precast.FC = {ear2="Loquacious Earring",
hands="Thaumas Gloves"}
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {ammo="Charis Feather",
head="Uk'uxkaj cap",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Maxixi Casaque",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Windbuffet Belt",legs="Manibozho Brais",feet="Manibozho Boots"}
gear.default.weaponskill_neck = "Asperity Necklace"
gear.default.weaponskill_waist = "Caudata Belt"
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {neck="Houyi's Gorget",hands="Iuitl Wristbands",
ring1="Stormsoul Ring",waist="Caudata Belt",legs="Nahtirah Trousers"})
sets.precast.WS['Exenterator'].Acc = set_combine(sets.precast.WS['Exenterator'], {ammo="Honed Tathlum", back="Toetapper Mantle"})
sets.precast.WS['Exenterator'].Mod = set_combine(sets.precast.WS['Exenterator'], {waist=gear.ElementalBelt})
sets.precast.WS['Pyrrhic Kleos'] = set_combine(sets.precast.WS, {head="Felistris Mask", hands="Maxixi Bangles +1", waist="Caudata Belt"})
sets.precast.WS['Pyrrhic Kleos'].Acc = set_combine(sets.precast.WS.Acc, {ammo="Honed Tathlum", hands="Maxixi Bangles +1", waist="Caudata Belt"})
sets.precast.WS['Evisceration'] = set_combine(sets.precast.WS, {ammo="Charis Feather",neck="Soil Gorget",waist="Caudata Belt", back="Rancorous Mantle"})
sets.precast.WS['Evisceration'].Acc = set_combine(sets.precast.WS['Evisceration'], {ammo="Honed Tathlum", neck="Soil Gorget",waist="Caudata Belt", back="Toetapper Mantle"})
sets.precast.WS['Evisceration'].Mod = set_combine(sets.precast.WS['Evisceration'], {waist=gear.ElementalBelt})
sets.precast.WS["Rudra's Storm"] = set_combine(sets.precast.WS, {ammo="Charis Feather",ear1="Brutal Earring",ear2="Moonshade Earring"})
sets.precast.WS["Rudra's Storm"].Acc = set_combine(sets.precast.WS["Rudra's Storm"], {ammo="Honed Tathlum", back="Letalis Mantle"})
sets.precast.WS['Aeolian Edge'] = {ammo="Charis Feather",
head="Thaumas Hat",neck="Stoicheion Medal",ear1="Friomisi Earring",ear2="Hecate's Earring",
body="Manibozho Jerkin",hands="Buremte Gloves",ring1="Rajas Ring",ring2="Demon's Ring",
back="Toro Cape",waist="Thunder Belt",legs="Iuitl Tights",feet="Iuitl Gaiters"}
sets.precast.Skillchain = {hands="Charis Bangles +2"}
-- Midcast Sets
sets.midcast.FastRecast = {
head="Felistris Mask",ear2="Loquacious Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",
back="Toetapper Mantle",legs="Kaabnax Trousers",feet="Iuitl Gaiters"}
-- Specific spells
sets.midcast.Utsusemi = {
head="Felistris Mask",neck="Torero Torque",ear2="Loquacious Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Beeline Ring",
back="Toetapper Mantle",legs="Kaabnax Trousers",feet="Iuitl Gaiters"}
-- Sets to return to when not performing an action.
-- Resting sets
sets.resting = {head="Oce. Headpiece +1",neck="Wiglen Gorget",
ring1="Sheltered Ring",ring2="Paguroidea Ring"}
sets.ExtraRegen = {head="Oce. Headpiece +1",neck="Wiglen Gorget",lring="Sheltered Ring",rring="Paguroidea Ring"}
-- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
sets.idle.Town = {ammo="Charis Feather",
head="Uk'uxkaj Cap",neck="Twilight Torque",lear="Gelai Earring",rear="Roundel Earring",
body="Thaumas Coat",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Toetapper Mantle",waist="Patentia Sash",legs="Quiahuiz Leggings",feet="Tandava Crackows"}
sets.idle.Field = {ammo="Charis Feather",
head="Iuitl headgear",neck="Twilight Torque",ear1="Gelai Earring",ear2="Novia Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Dark Ring",ring2="Dark Ring",
back="Shadow Mantle",waist="Flume Belt",legs="Iuitl Tights",feet="Tandava Crackows"}
sets.idle.Weak = {ammo="Charis Feather",
head="Iuitl headgear",neck="Twilight Torque",ear1="Gelai Earring",ear2="Novia Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Dark Ring",ring2="Dark Ring",
back="Shadow Mantle",waist="Flume Belt",legs="Iuitl Tights",feet="Iuitl Gaiters"}
-- Defense sets
sets.defense.Evasion = {ammo="Charis Feather",
head="Ejekamal Mask",neck="Charis Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Charis Casaque +2",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Toetapper Mantle",waist="Patentia Sash",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.defense.PDT = {ammo="Charis Feather",
head="Iuitl headgear",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Dark Ring",ring2="Dark Ring",
back="Mollusca Mantle",waist="Flume Belt",legs="Iuitl Tights",feet="Iuitl Gaiters"}
sets.defense.MDT = {ammo="Charis Feather",
head="Iuitl headgear",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Dark Ring",ring2="Dark Ring",
back="Mollusca Mantle",waist="Flume Belt",legs="Iuitl Tights",feet="Iuitl Gaiters"}
sets.Kiting = {feet="Tandava Crackows"}
-- 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="Charis Feather",
head="Felistris Mask",neck="Charis Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Charis Casaque +2",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.engaged.Acc = {ammo="Honed Tathlum",
head="Ejekamal Mask",neck="Charis Necklace",ear1="Steelflash Earring",ear2="Heartseeker Earring",
body="Charis Casaque +2",hands="Buremte Gloves",ring1="Epona's Ring",ring2="Rajas Ring",
back="Toetapper Mantle",waist="Patentia Sash",legs="Kaabnax Trousers",feet="Manibozho Boots"}
sets.engaged.Evasion = {ammo="Charis Feather",
head="Felistris Mask",neck="Torero Torque",ear1="Gelai Earring",ear2="Novia Earring",
body="Charis Casaque +2",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Kaabnax Trousers",feet="Manibozho Boots"}
sets.engaged.Acc.Evasion = {ammo="Charis Feather",
head="Felistris Mask",neck="Charis Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Charis Casaque +2",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.engaged.PDT = {ammo="Charis Feather",
head="Iuitl headgear",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Dark Ring",ring2="Dark Ring",
back="Mollusca Mantle",waist="Flume Belt",legs="Iuitl Tights",feet="Iuitl Gaiters"}
sets.engaged.PDTH = {ammo="Charis Feather",
head="Iuitl headgear",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Charis Casaque +2",hands="Iuitl Wristbands",ring1="Dark Ring",ring2="Dark Ring",
back="Mollusca Mantle",waist="Patentia Sash",legs="Iuitl Tights",feet="Iuitl Gaiters"}
sets.engaged.Acc.PDT = {ammo="Honed Tathlum",
head="Iuitl headgear",neck="Twilight Torque",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Iuitl Vest",hands="Buremte Gloves",ring1="Dark Ring",ring2="Dark Ring",
back="Mollusca Mantle",waist="Flume Belt",legs="Iuitl Tights",feet="Iuitl Gaiters"}
-- Custom melee group: High Haste
sets.engaged.HighHaste = {ammo="Charis Feather",
head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Thaumas Coat",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.engaged.HighHaste.Acc = {ammo="Honed Tathlum",
head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Thaumas Coat",hands="Buremte Gloves",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.engaged.HighHaste.Evasion = {ammo="Charis Feather",
head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Thaumas Coat",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.engaged.HighHaste.Acc.Evasion = {ammo="Charis Feather",
head="Ejekamal Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Thaumas Coat",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.engaged.HighHaste.PDT = {ammo="Charis Feather",
head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Thaumas Coat",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.engaged.HighHaste.Acc.PDT = {ammo="Charis Feather",
head="Felistris Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Thaumas Coat",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
-- Custom melee group: Max Haste
sets.engaged.MaxHaste = {ammo="Charis Feather",
head="Felistris Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Thaumas Coat",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Windbuffet Belt",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.engaged.MaxHaste.Acc = {ammo="Honed Tathlum",
head="Felistris Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Thaumas Coat",hands="Buremte Gloves",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Windbuffet Belt",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.engaged.MaxHaste.Evasion = {ammo="Charis Feather",
head="Felistris Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Thaumas Coat",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Windbuffet Belt",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.engaged.MaxHaste.Acc.Evasion = {ammo="Charis Feather",
head="Felistris Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Thaumas Coat",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Windbuffet Belt",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.engaged.MaxHaste.PDT = {ammo="Charis Feather",
head="Felistris Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Thaumas Coat",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Windbuffet Belt",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.engaged.MaxHaste.Acc.PDT = {ammo="Charis Feather",
head="Felistris Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Thaumas Coat",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Windbuffet Belt",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
-- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
sets.buff['Climactic Flourish'] = {legs="Charis Tiara +2"}
Server: Asura
Game: FFXI
Posts: 415
By Asura.Cambion 2014-02-04 00:56:47
For now, I'm going to assume people can decipher the gear sets in part 2, and customize them as need be. I'll go back later and break down the sets a bit more for those who need it.
If you don't understand them, then do what I did to start, and copy/paste the same set into every single one, so you don't have to worry about it. Just get your Engaged, Idle and WS set's done, and you'll be good enough for now.
Part 3: Breaking down the rest of the Dnc.lua file
Going to start at the top:
A: Automatic Macro Change - Line 31
Here we’ll run into a very simple, but potentially very annoying issue.
-- Default macro set/book
set_macro_page(2, 5)
This will change your macro’s to whatever it’s set at. By default it’s 5, 20, which is Book 20, set 5. You can opt to set it to your specific macro, or delete it. I personally use Autoexec to handle all of my macro swaps on job change, because it can also decipher sub jobs.
B: Key Binds - Line 35
C: Cycling Sets - Line 46
-- Options: Override default values
options.OffenseModes = {'Normal', 'PDT', 'PDTH'}
options.DefenseModes = {'Normal', 'Evasion', 'PDT'}
options.WeaponskillModes = {'Normal', 'Acc', 'Att', 'Mod'}
options.IdleModes = {'Normal'}
options.RestingModes = {'Normal'}
options.PhysicalDefenseModes = {'Evasion', 'PDT'}
options.MagicalDefenseModes = {'MDT'}
Here is where you can define which sets you want to be able to manually trigger with a key.
OffenseModes is the one you’ll most commonly use. In my file you can see I have Normal, PDT and PDTH, as these are the 3 sets I use. The ‘Normal’ will directly correspond to the set we have in our Dnc_gear.lua on line 41: “-- Normal melee group
sets.engaged = {ammo="Charis Feather",
head="Ejekamal Mask",neck="Charis Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Charis Casaque +2",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
“
Normal = sets.engaged
The abbreviation after engauged.XXX will be the name of the actual set. So again, for me, you can see on line 158, that I have my PDT set, and on line 162, my PDTH set.
This means that I can cycle through these 3 sets with 1 button, and the cycle will be in the listed order: Normal > PDT > PDTH.
If you want to add or remove a set, you simply add a comma, and the name of the new set in single quotes:
options.OffenseModes = {'Normal', 'PDT', 'PDTH'} would become:
options.OffenseModes = {'Normal', 'PDT', 'PDTH', ‘Acc’}
And that would allow you to cycle through the 4 sets. You can put them in any order you desire, or add and delete whichever sets best suit your playstyle.
This same logic will apply to the other option.XXX modes.
To determine the key that controls this, you’ll want to open (Edit with Notepad++) the Mote-Globals file. Beginning at line 43, you’ll see all of the bind commands. You can use whichever key you like, but the command you’ll need to use is:
send_command('bind f9 gs c cycle OffenseMode')
Where f9 is the key you’re binding and you can change it to whatever you like.
Personally, I use F9 to cycle my TP sets, F10 to cycle my steps, f11 to cycle kiting, and f12 is to refresh. I’ll explain these as we go on.
Regardless of what key you choose, you can now test it in game.
*Remember you need to reload Gearswap anytime you make changes to the .lua files for them to take effect. This can be done by typing the following command in your chat log:
//lua u gearswap
//lua l gearswap
If you need help remembering this command, it’s lua = Load Unload Addon
The u or l defines whether you’re loading or unloading
and the following is the name of the addon, in this case gearswap.
D: Haste Triggers - Line 284 or 506(if you didn’t delete the gear sets)
Here you can see exactly what it takes for Gearswap to trigger to the first and second haste sets. These sets can be found in the Dnc_Gear.lua, and they all correspond respectively. By this I mean, sets.engaged will trigger the sets.engaged.HighHaste and then sets.engaged.MaxHaste. If you’ve used the ‘cycle’ option, that put you into another set, when you trigger the haste cap, it will put you into the same set of that high haste category. So if you ‘cycle mode’ into your PDT set: sets.engaged.PDT it will automatically go to sets.engaged.HighHaste.PDT and then sets.engaged.MaxHaste.PDT. This will happen for all of the sets you have or use, as long as they’re correctly listed.
For those who haven't toyed with this, or don't want to waste their time with the calculations, here are what I've DPS's out to be the best options/swapped for each tier: (Ignoring the fact I don't have Felistris Mask yet QQ) Code sets.engaged = {ammo="Charis Feather",
head="Ejekamal Mask",neck="Charis Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Charis Casaque +2",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.engaged.HighHaste = {ammo="Charis Feather",
head="Ejekamal Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
body="Thaumas Coat",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Patentia Sash",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
sets.engaged.MaxHaste = {ammo="Charis Feather",
head="Ejekamal Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Thaumas Coat",hands="Maxixi Bangles +1",ring1="Epona's Ring",ring2="Rajas Ring",
back="Atheling Mantle",waist="Windbuffet Belt",legs="Quiahuiz Leggings",feet="Manibozho Boots"}
E: Auto-Presto - Line 315/537
Okay, so this is a script that will automatically use Presto prior to any ‘Step’ you perform. Technically, it’s only suppose to occur if your finishing moves are below 3, but it’s not currently working as intended, but it’s far better than manually using Presto every other step. And for those using steps frequently, Presto won’t even be ready by your second step anyways.
The issue, is that for me personally, the one Mote has listed in the default Dnc file, doesn’t work at all. It may have been something I broke, but I didn’t want to bug him with it, so I simply altered it, back to an older version that did work. That code is here for anyone else experiencing the same issue as I was: Code
-- Automatically use Presto for steps when it's available and we have less than 3 finishing moves
function job_pretarget(spell, action, spellMap, eventArgs)
if spell.type == 'Step' then
local allRecasts = windower.ffxi.get_ability_recasts()
local prestoCooldown = allRecasts[236]
local under3FMs = not buffactive['Finishing Move 3'] and not buffactive['Finishing Move 4'] and not buffactive['Finishing Move 5']
if player.main_job_level >= 77 and prestoCooldown < 1 and under3FMs then
cast_delay(1.1)
send_command('input /ja "Presto" <me>')
end
end
end
Server: Asura
Game: FFXI
Posts: 415
By Asura.Cambion 2014-02-04 00:56:50
Part 4: Automatic Waltz Efficiency User Thingymajig
Mote has made an automatic Waltz Calculator thing, that will alter the Waltz you use, based on the targets current HP and your current TP, to heal their HP in the most efficient way. Sounds awesome right? Well... I suppose that depends. If you play Dnc the way I do, you'll hate this. I liked it in theory, but it absolutely killed me in practice.
Perhaps I'm alone in this regard, but I basically use Waltz III for everything. And if you super tank things like Reives for cape farming, or anything else where you have multiple mobs on you, you'll quickly find how often a Waltz 4 or 5 will get you killed, because of the longer recast. Unfortunately with this script, you can't control your Waltz's. So while I enjoyed the downgrade from a Waltz 3, to a waltz 2 for tp sake, and it was also nice for it to cancel a waltz, if I accidentally hit the wrong macro because it knows my HP is full, I couldn't handle it UPgrading my waltz's to larger cure.
Lucky for us, that was an easy fix that I actually figured out myself. First let's find/look at the original script. To find and edit this, you'll want to open up (Edit with Notepad++) the Mote-Utility file.
Scroll down to line 66 and you'll find the following: Code -- If we can estimate missing HP, we can adjust the preferred tier used.
if targ then
if player.main_job == 'DNC' then
if missingHP < 40 then
-- not worth curing
add_to_chat(122,'Full HP!')
eventArgs.cancel = true
return
elseif missingHP < 200 then
newWaltz = 'Curing Waltz'
elseif missingHP < 600 then
newWaltz = 'Curing Waltz II'
elseif missingHP < 1100 then
newWaltz = 'Curing Waltz III'
elseif missingHP < 1500 then
newWaltz = 'Curing Waltz IV'
else
newWaltz = 'Curing Waltz V'
end
elseif player.sub_job == 'DNC' then
if missingHP < 150 then
newWaltz = 'Curing Waltz'
elseif missingHP < 300 then
newWaltz = 'Curing Waltz II'
else
newWaltz = 'Curing Waltz III'
end
else
return
end
end
Relatively straight forward once you break it down.
If the target is missing less than 40hp, it won't waltz at all.
If the target is missing less than 200hp, it'll use Waltz 1
Less than 600, Waltz 2
1100 = 3
1500 = 4
or else (meaning if none of these apply, AKA 1501 or higher)
it will use waltz 5.
Initially I altered it to just remove the Waltz 5 option, because I don't think we ever want that to happen, but even so, the 4's were getting me killed while solo'ing Marjamine Ravine Reives. I endedup making Waltz III the highest it could use, this way, the script will only downgrade from 3 > 2 > 1 > won't waltz, and will never upgrade beyond 3.
Some may find this useful, some may enjoy the regular script, thus I'm offering both:
Code
if targ then
if player.main_job == 'DNC' then
if missingHP < 40 then
-- not worth curing
add_to_chat(122,'Full HP!')
eventArgs.cancel = true
return
elseif missingHP < 200 then
newWaltz = 'Curing Waltz'
elseif missingHP < 600 then
newWaltz = 'Curing Waltz II'
else
newWaltz = 'Curing Waltz III'
end
elseif player.sub_job == 'DNC' then
if missingHP < 150 then
newWaltz = 'Curing Waltz'
elseif missingHP < 300 then
newWaltz = 'Curing Waltz II'
else
newWaltz = 'Curing Waltz III'
end
else
return
end
end
You can also customize the amount of HP missing if you like, I haven’t done that yet, but have been meaning to. That will allow you to alter the script to better fit your current Waltz build.
Part 5: Stuff
A: Automatic Steppermatic Maticmatic
First we need to make the macro.
The normal macro in FFXI will be a single line of text like so:
/console gs c step
it is case sensitive, like almost everything in Gearswap, so be mindful of that.
Now, you have the option to 'cyclestep' just like we did with our offensive modes. To do this, you'll want to select a bind key.
Again, I use f9-f12 for my toggles, but you're free to use whatever you like. There's 2 places you can do this.
The first is is the Dnc.lua, where you see the binds listed on lines 35. The alternate option is the Mote-Globals.lua where you'll see them on line 43.
Keep in mind, using the Globals will effect all jobs, using the Dnc.lua will only effect Dnc. It appears to me, that the Globals.lua will take precedence over the Dnc.lua but I haven't tested that yet. You also have the option to use Shift+ a key, or Ctrl + a key for binds as well. Meaning you can actually Bind 3 commands to the same key. f9, shift f9 and ctrl f9 for example.
YOu may do this however you please, with whatever keys you prefer. Once you've decided, you can unload and reload Gearswap. (//lua u gearswap > //gs lua l gearswap) and then test your key. Upon hitting your key, you will get a chatlog message "Mainstep mode is now xxxStep" Where, xxx is the step that will now be used by your macro. This allows you to change steps anytime, without having to alter macro sets, or having multiple macros for your steps.
If you'd like, you can customize the order, or amount of steps it cycles through, again, just like we did with our offensive modes. You'll find this code on line 57 of your Dnc.lua.
options.StepModes = {'Box Step', 'Quickstep', 'Feather Step', 'Stutter Step'}
Server: Asura
Game: FFXI
Posts: 415
By Asura.Cambion 2014-02-04 00:56:55
Part 5: Stuff
A: Automatic Steppermatic Maticmatic
First we need to make the macro.
The normal macro in FFXI will be a single line of text like so:
/console gs c step
it is case sensitive, like almost everything in Gearswap, so be mindful of that.
Now, you have the option to 'cyclestep' just like we did with our offensive modes. To do this, you'll want to select a bind key.
Again, I use f9-f12 for my toggles, but you're free to use whatever you like. There's 2 places you can do this.
The first is is the Dnc.lua, where you see the binds listed on lines 35. The alternate option is the Mote-Globals.lua where you'll see them on line 43.
Keep in mind, using the Globals will effect all jobs, using the Dnc.lua will only effect Dnc. It appears to me, that the Globals.lua will take precedence over the Dnc.lua but I haven't tested that yet. You also have the option to use Shift+ a key, or Ctrl + a key for binds as well. Meaning you can actually Bind 3 commands to the same key. f9, shift f9 and ctrl f9 for example.
YOu may do this however you please, with whatever keys you prefer. Once you've decided, you can unload and reload Gearswap. (//lua u gearswap > //gs lua l gearswap) and then test your key. Upon hitting your key, you will get a chatlog message "Mainstep mode is now xxxStep" Where, xxx is the step that will now be used by your macro. This allows you to change steps anytime, without having to alter macro sets, or having multiple macros for your steps.
If you'd like, you can customize the order, or amount of steps it cycles through, again, just like we did with our offensive modes. You'll find this code on line 57 of your Dnc.lua.
options.StepModes = {'Box Step', 'Quickstep', 'Feather Step', 'Stutter Step'}
B: To Be Determined
VIP
Server: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-02-04 02:00:22
Corrections:
1) Copy everything from line 40:
Code
-- Called when this job file is unloaded (eg: job change)
to line 330:
Code
-- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
sets.buff['Saber Dance'] = {legs="Etoile Tights +2"}
sets.buff['Climactic Flourish'] = {legs="Charis Tiara +2"}
end
This includes the start of the function file_unload(), down to the end of the init_gear_sets() function.
COPY, don't CUT all of that text, and paste into a new document.
Save that document as dnc_gear.lua. The contents of dnc_gear.lua should now be something like:
Code
-- Called when this job file is unloaded (eg: job change)
function file_unload()
if binds_on_unload then
binds_on_unload()
end
send_command('unbind ^`')
send_command('unbind !`')
send_command('unbind ^=')
send_command('unbind !=')
send_command('unbind ^-')
send_command('unbind !-')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
-- <snip> lots of stuff
end
Do not remove the original functions from dnc.lua. The functions in dnc_gear.lua will REPLACE them when loaded, so there's no worry about mixing up the gear between my files and yours.
If you do not keep the functions, but instead place all the raw sets in the dnc_gear file, those sets will be loaded, and then the init_gear_sets() function of the original dnc.lua file will be called, which will overwrite all those sets you just put in. You don't want this to happen.
If you deleted init_gear_sets() then the main file's sets won't overwrite yours, but it will error out because init_gear_sets() doesn't exist anymore. You don't want this to happen.
If you deleted only the contents of init_gear_sets() then things would work, but you'd lose access to certain other methodologies, and just generally be a poor way of going about it.
ADVANCED NOTE: Technically, every function in dnc_gear.lua will overwrite any corresponding one in dnc.lua. That means that if you want to modify the actual rules of the original file, you could create a new instance of the relevant function in dnc_gear.lua and it won't be overwritten when you get a new version of the main file.
Only do that if you understand the implications of how this works.
Valefor.Endoq
Server: Valefor
Game: FFXI
Posts: 6906
By Valefor.Endoq 2014-02-04 02:09:50
example:
/equip body "Name of Item"
equipping left and right ring/ear is ear1 or ear2 and same with rings :D
and even if its not ammo it will be /equip ammo "Bomb Core"
spelling it exactly like in game is important to
and now you know how to macro swap gear (=◕‿-)
[+]
By siskotaru 2014-02-04 04:34:20
Many, many thanks. Time to update from Spellcast !
[+]
Ragnarok.Mixi
Server: Ragnarok
Game: FFXI
Posts: 4
By Ragnarok.Mixi 2014-02-08 15:31:21
thanks for all the work.
is the Automatic Waltz thing still working? do i have to use a console macro or something? cuz if i just use walz III it will still use it even if i just lost 100hp
VIP
Server: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-02-08 16:35:54
If you're using mine, make sure you call refine_waltz() from precast. It's defined in Mote-Utilities.
Server: Asura
Game: FFXI
Posts: 415
By Asura.Cambion 2014-02-08 18:04:52
thanks for all the work.
is the Automatic Waltz thing still working? do i have to use a console macro or something? cuz if i just use walz III it will still use it even if i just lost 100hp
It's working for me, but I haven't updated any of Mote's 5 files recently. When I have some free time, I'll create a backup, and update all the new files, and see if it's broke. I'm also going to experiment with what Mote laid out in his initial response, to see if it works better.
I'll get back to you as soon as I can with the results.
As for what Mote said, I'm not positive I understand, but on line 20 of the Mote-Utilities you'll find: Code function refine_waltz(spell, action, spellMap, eventArgs)
if spell.type ~= 'Waltz' then
return
end
Then at line 75 of the Dnc.lua you have this: Code function job_precast(spell, action, spellMap, eventArgs)
--auto_presto(spell)
if spell.type == 'Waltz' then
refine_waltz(spell, action, spellMap, eventArgs)
end
cancel_conflicting_buffs(spell, action, spellMap, eventArgs)
end
Double check your files and see if they match, if not maybe try some copy/pasting and see if you can get it fixed with trial error, otherwise I'll play with it later on.
VIP
Server: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-02-08 18:17:07
Actually, it gets further revised based on what I pushed today.
You want to copy the entirety of the following functions:
user_setup() -- var setup for anything aside from gear sets (option lists, default macro page, buff variables, etc).
init_gear_sets() -- all gear sets
file_unload() -- when the job file is unloaded (job change, shutdown, etc)
Copy them whole cloth into the sidecar file, along with any personal changes, and they will be used instead of the ones in the main job file.
Lakshmi.Byrth
VIP
Server: Lakshmi
Game: FFXI
Posts: 6188
By Lakshmi.Byrth 2014-02-08 18:20:01
kind of a random side-note, but Desultor Tassets' "Waltz TP Cost -5" has to be equipped at Precast or the server will block your Waltz on the grounds of you not having enough TP. It has to remain equipped for midcast or you won't get its effect. I don't know what would happen if you wore them for precast with 45 TP and switched them away to something else for midcast. Perhaps it would block you again at midcast, or perhaps you'd end up with have negative TP.
Ragnarok.Mixi
Server: Ragnarok
Game: FFXI
Posts: 4
By Ragnarok.Mixi 2014-02-08 18:38:42
ok, i went back and download everything fresh from repository and used waltz without editing anything in the files and i had the following error everytime i use waltz
Quote: GearSwap: Lua error (runtime) - ...gram Files (x86)/Windower4//addons/gearswap/flow.lua:254:
and
Quote: User function error: ...86)Windower4/addons/gearswap/data/Mote-utility.lua:137: attempt to index global 'res' (a nil value)
Server: Asura
Game: FFXI
Posts: 415
By Asura.Cambion 2014-02-08 21:30:15
ok, i went back and download everything fresh from repository and used waltz without editing anything in the files and i had the following error everytime i use waltz
Quote: GearSwap: Lua error (runtime) - ...gram Files (x86)/Windower4//addons/gearswap/flow.lua:254:
and
Quote: User function error: ...86)Windower4/addons/gearswap/data/Mote-utility.lua:137: attempt to index global 'res' (a nil value)
Out of pure curiosity, try these. It's my exact Dnc.lua and current Mote-Utility
Dnc.lua Code -------------------------------------------------------------------------------------------------------------------
-- Initialization function that defines sets and variables to be used.
-------------------------------------------------------------------------------------------------------------------
-- IMPORTANT: Make sure to also get the Mote-Include.lua file (and its supplementary files) to go with this.
-- Initialization function for this job file.
function get_sets()
-- Load and initialize the include file.
include('Mote-Include.lua')
end
-- Called when this job file is unloaded (eg: job change)
function file_unload()
if binds_on_unload then
binds_on_unload()
end
send_command('unbind ^`')
send_command('unbind !`')
send_command('unbind ^=')
send_command('unbind !=')
send_command('unbind ^-')
send_command('unbind !-')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
-- Default macro set/book
set_macro_page(2, 5)
-- Additional local binds
send_command('bind ^= gs c cycle mainstep')
send_command('bind != gs c cycle altstep')
send_command('bind ^- gs c toggle selectsteptarget')
send_command('bind !- gs c toggle usealtstep')
send_command('bind ^` input /ja "Chocobo Jig" <me>')
send_command('bind !` input /ja "Chocobo Jig II" <me>')
determine_haste_group()
-- Options: Override default values
options.OffenseModes = {'Normal', 'PDT', 'PDTH', 'Acc'}
options.DefenseModes = {'Normal', 'Evasion', 'PDT'}
options.WeaponskillModes = {'Normal', 'Acc'}
options.IdleModes = {'Normal'}
options.RestingModes = {'Normal'}
options.PhysicalDefenseModes = {'Evasion', 'PDT'}
options.MagicalDefenseModes = {'MDT'}
state.Defense.PhysicalMode = 'Evasion'
options.StepModes = {'Box Step', 'Quickstep'}
state.MainStep = 'Box Step'
state.AltStep = 'Quickstep'
state.CurrentStep = 'Main'
state.UseAltStep = false
state.SelectStepTarget = false
state.IgnoreTargetting = false
skillchainPending = false
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks that are called to process player actions at specific points in time.
-------------------------------------------------------------------------------------------------------------------
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
-- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
function job_precast(spell, action, spellMap, eventArgs)
--auto_presto(spell)
if spell.type == 'Waltz' then
refine_waltz(spell, action, spellMap, eventArgs)
end
cancel_conflicting_buffs(spell, action, spellMap, eventArgs)
end
function cancel_conflicting_buffs(spell, action, spellMap, eventArgs)
if spell.name == 'Spectral Jig' and buffactive.sneak then
send_command('cancel sneak')
elseif (spell.name == 'Trance' or spell.type=='Waltz') and buffactive['saber dance'] then
send_command('cancel saber dance')
elseif spell.type=='Samba' and buffactive['fan dance'] then
send_command('cancel fan dance')
elseif spell.name:startswith('Monomi') then
send_command('@wait 1.7;cancel sneak')
elseif spell.name == 'Utsusemi: Ichi' then
send_command('@wait 1.7;cancel copy image*')
end
end
function job_post_precast(spell, action, spellMap, eventArgs)
if spell.type:lower() == "weaponskill" then
if skillchainPending then
equip(sets.precast.Skillchain)
end
end
end
-- Return true if we handled the aftercast work. Otherwise it will fall back
-- to the general aftercast() code in Mote-Include.
function job_aftercast(spell, action, spellMap, eventArgs)
if not spell.interrupted then
if spell.english == "Wild Flourish" then
skillchainPending = true
send_command('wait 7;gs c clear skillchainPending')
elseif spell.type:lower() == "weaponskill" then
skillchainPending = not skillchainPending
send_command('wait 7;gs c clear skillchainPending')
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- Customization hooks for idle and melee sets, after they've been automatically constructed.
-------------------------------------------------------------------------------------------------------------------
function customize_idle_set(idleSet)
if player.hpp < 95 and not areas.Cities:contains(world.area) then
idleSet = set_combine(idleSet, sets.ExtraRegen)
end
return idleSet
end
function customize_melee_set(meleeSet)
if not state.Defense.Active then
if buffactive['saber dance'] then
meleeSet = set_combine(meleeSet, sets.buff['Saber Dance'])
end
if buffactive['climactic flourish'] then
meleeSet = set_combine(meleeSet, sets.buff['Climactic Flourish'])
end
end
return meleeSet
end
-------------------------------------------------------------------------------------------------------------------
-- General hooks for other 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 buff == 'Saber Dance' or buff == 'Climactic Flourish' then
handle_equipping_gear(player.status)
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements self-commands.
-------------------------------------------------------------------------------------------------------------------
-- Called for custom player commands.
function job_self_command(cmdParams, eventArgs)
if cmdParams[1] == 'clear' and cmdParams[2] and cmdParams[2]:lower() == 'skillchainpending' then
skillchainPending = false
elseif cmdParams[1] == 'step' then
if cmdParams[2] == 't' then
state.IgnoreTargetting = true
end
local doStep = state.MainStep
if state.UseAltStep then
doStep = state[state.CurrentStep..'Step']
if state.CurrentStep == 'Main' then
state.CurrentStep = 'Alt'
else
state.CurrentStep = 'Main'
end
end
send_command('@input /ja "'..doStep..'" <t>')
end
end
-- Called by the default 'update' self-command.
function job_update(cmdParams, eventArgs)
determine_haste_group()
end
-- Hooks for step mode handling.
-- Job-specific toggles.
function job_toggle(field)
if field:lower() == 'selectsteptarget' then
state.SelectStepTarget = not state.SelectStepTarget
return "Select Step Target", state.SelectStepTarget
elseif field:lower() == 'usealtstep' then
state.UseAltStep = not state.UseAltStep
return "Use Alt Step", state.UseAltStep
end
end
-- Request job-specific mode tables.
-- Return the list, and the current value for the requested field.
function job_get_mode_list(field)
if field == 'Mainstep' then
return options.StepModes, state.MainStep
elseif field == 'Altstep' then
return options.StepModes, state.AltStep
end
end
-- Set job-specific mode values.
-- Return true if we recognize and set the requested field.
function job_set_mode(field, val)
if field == 'Mainstep' then
state.MainStep = val
return true
elseif field == 'Altstep' then
state.AltStep = val
return true
end
end
-- Handle auto-targetting based on local setup.
function job_auto_change_target(spell, action, spellMap, eventArgs)
if spell.type == 'Step' then
if state.IgnoreTargetting then
state.IgnoreTargetting = false
eventArgs.handled = true
end
eventArgs.SelectNPCTargets = state.SelectStepTarget
end
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 defenseString = ''
if state.Defense.Active then
local defMode = state.Defense.PhysicalMode
if state.Defense.Type == 'Magical' then
defMode = state.Defense.MagicalMode
end
defenseString = 'Defense: '..state.Defense.Type..' '..defMode..', '
end
local steps = ''
if state.UseAltStep then
steps = ', ['..state.MainStep..'/'..state.AltStep..']'
else
steps = ', ['..state.MainStep..']'
end
if state.SelectStepTarget then
steps = steps..' (Targetted)'
end
add_to_chat(122,'Melee: '..state.OffenseMode..'/'..state.DefenseMode..', WS: '..state.WeaponskillMode..', '..defenseString..
'Kiting: '..on_off_names[state.Kiting]..steps)
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
function determine_haste_group()
-- We have three groups of DW in gear: Charis body, Charis neck + DW earrings, and Patentia Sash.
-- For high haste, we want to be able to drop one of the 10% groups (body, preferably).
-- High haste buffs:
-- 2x Marches + Haste
-- 2x Marches + Haste Samba
-- 1x March + Haste + Haste Samba
-- Embrava + any other haste buff
-- For max haste, we probably need to consider dropping all DW gear.
-- Max haste buffs:
-- Embrava + Haste/March + Haste Samba
-- 2x March + Haste + Haste Samba
classes.CustomMeleeGroups:clear()
if buffactive.embrava and (buffactive.haste or buffactive.march) and buffactive['haste samba'] then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive.march == 2 and buffactive.haste and buffactive['haste samba'] then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive.embrava and (buffactive.haste or buffactive.march or buffactive['haste samba']) then
classes.CustomMeleeGroups:append('HighHaste')
elseif buffactive.march == 1 and buffactive.haste and buffactive['haste samba'] then
classes.CustomMeleeGroups:append('HighHaste')
elseif buffactive.march == 2 and (buffactive.haste or buffactive['haste samba']) then
classes.CustomMeleeGroups:append('HighHaste')
end
end
-- Automatically use Presto for steps when it's available and we have less than 3 finishing moves
function job_pretarget(spell, action, spellMap, eventArgs)
if spell.type == 'Step' then
local allRecasts = windower.ffxi.get_ability_recasts()
local prestoCooldown = allRecasts[236]
local under3FMs = not buffactive['Finishing Move 3'] and not buffactive['Finishing Move 4'] and not buffactive['Finishing Move 5']
if player.main_job_level >= 77 and prestoCooldown < 1 and under3FMs then
cast_delay(1.1)
send_command('input /ja "Presto" <me>')
end
end
end
Utility.lua Code -------------------------------------------------------------------------------------------------------------------
-- General utility functions that can be used by any job files. Outside the scope of what the main
-- include file deals with.
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-- Buff-cancelling utility functions.
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-- Utility functions for changing target types and spells in an automatic manner.
-------------------------------------------------------------------------------------------------------------------
-- Utility function for automatically adjusting the waltz spell being used to match the HP needs.
-- Handle spell changes before attempting any precast stuff.
-- Returns two values on completion:
-- 1) bool of whether the original spell was cancelled
-- 2) bool of whether the spell was changed to something new
function refine_waltz(spell, action, spellMap, eventArgs)
if spell.type ~= 'Waltz' then
return
end
-- Don't modify anything for Healing Waltz or Divine Waltzes
if spell.name == "Healing Waltz" or spell.name == "Divine Waltz" or spell.name == "Divine Waltz II" then
return
end
local newWaltz = spell.english
local missingHP = 0
local targ
-- If curing ourself, get our exact missing HP
if spell.target.type == "SELF" then
targ = alliance[1][1]
missingHP = player.max_hp - player.hp
-- If curing someone in our alliance, we can estimate their missing HP
elseif spell.target.isallymember then
targ = find_player_in_alliance(spell.target.name)
local est_max_hp = targ.hp / (targ.hpp/100)
missingHP = math.floor(est_max_hp - targ.hp)
end
-- If we can estimate missing HP, we can adjust the preferred tier used.
if targ then
if player.main_job == 'DNC' then
if missingHP < 40 then
-- not worth curing
add_to_chat(122,'Full HP!')
eventArgs.cancel = true
return
elseif missingHP < 200 then
newWaltz = 'Curing Waltz'
elseif missingHP < 600 then
newWaltz = 'Curing Waltz II'
else
newWaltz = 'Curing Waltz III'
end
elseif player.sub_job == 'DNC' then
if missingHP < 150 then
newWaltz = 'Curing Waltz'
elseif missingHP < 300 then
newWaltz = 'Curing Waltz II'
else
newWaltz = 'Curing Waltz III'
end
else
return
end
end
local waltzTPCost = {['Curing Waltz'] = 20,['Curing Waltz II'] = 35,['Curing Waltz III'] = 50,['Curing Waltz IV'] = 65,['Curing Waltz V'] = 80}
local tpCost = waltzTPCost[newWaltz]
local downgrade
-- Downgrade the spell to what we can afford
if player.tp < tpCost and not buffactive.trance then
--[[ Costs:
Curing Waltz: 20 TP
Curing Waltz II: 35 TP
Curing Waltz III: 50 TP
Curing Waltz IV: 65 TP
Curing Waltz V: 80 TP
Divine Waltz: 40 TP
Divine Waltz II: 80 TP
--]]
if player.tp < 20 then
add_to_chat(122, 'Insufficient TP ['..tostring(player.tp)..']. Cancelling.')
eventArgs.cancel = true
return
elseif player.tp < 35 then
newWaltz = 'Curing Waltz'
elseif player.tp < 50 then
newWaltz = 'Curing Waltz II'
elseif player.tp < 65 then
newWaltz = 'Curing Waltz III'
elseif player.tp < 80 then
newWaltz = 'Curing Waltz IV'
end
downgrade = 'Insufficient TP ['..tostring(player.tp)..']. Downgrading to '..newWaltz..'.'
end
if newWaltz ~= spell.english then
send_command('@input /ja "'..newWaltz..'" '..tostring(spell.target.raw))
if downgrade then
add_to_chat(122, downgrade)
end
eventArgs.cancel = true
return
end
if missingHP > 0 then
add_to_chat(122,'Trying to cure '..tostring(missingHP)..' HP using '..newWaltz..'.')
end
end
-- Function to allow for automatic adjustment of the spell target type based on preferences.
function auto_change_target(spell, action, spellMap)
-- Do not modify target for spells where we get <lastst> or <me>.
if spell.target.raw == ('<lastst>') or spell.target.raw == ('<me>') then
return
end
-- init a new eventArgs with current values
local eventArgs = {handled = false, PCTargetMode = state.PCTargetMode, SelectNPCTargets = state.SelectNPCTargets}
-- Allow the job to do custom handling, or override the default values.
-- They can completely handle it, or set one of the secondary eventArgs vars to selectively
-- override the default state vars.
if job_auto_change_target then
job_auto_change_target(spell, action, spellMap, eventArgs)
end
-- If the job handled it, we're done.
if eventArgs.handled then
return
end
local pcTargetMode = eventArgs.PCTargetMode
local selectNPCTargets = eventArgs.SelectNPCTargets
local canUseOnPlayer = spell.validtarget and
(spell.validtarget.Self or spell.validtarget.Player or spell.validtarget.Party or spell.validtarget.Ally or spell.validtarget.NPC)
local newTarget
-- For spells that we can cast on players:
if canUseOnPlayer and pcTargetMode ~= 'default' then
if pcTargetMode == 'stal' then
-- Use <stal> if possible, otherwise fall back to <stpt>.
if spell.validtarget.Ally then
newTarget = '<stal>'
elseif spell.validtarget.Party then
newTarget = '<stpt>'
end
elseif pcTargetMode == 'stpt' then
-- Even ally-possible spells are limited to the current party.
if spell.validtarget.Ally or spell.validtarget.Party then
newTarget = '<stpt>'
end
elseif pcTargetMode == 'stpc' then
-- If it's anything other than a self-only spell, can change to <stpc>.
if spell.validtarget.Player or spell.validtarget.Party or spell.validtarget.Ally or spell.validtarget.NPC then
newTarget = '<stpc>'
end
end
-- For spells that can be used on enemies:
elseif spell.validtarget and spell.validtarget.Enemy and selectNPCTargets then
-- Note: this means macros should be written for <t>, and it will change to <stnpc>
-- if the flag is set. It won't change <stnpc> back to <t>.
newTarget = '<stnpc>'
end
-- If a new target was selected and is different from the original, call the change function.
if newTarget and newTarget ~= spell.target.raw then
change_target(newTarget)
end
end
-------------------------------------------------------------------------------------------------------------------
-- Environment utility functions.
-------------------------------------------------------------------------------------------------------------------
-- Function to get the current weather intensity: 0 for none, 1 for single weather, 2 for double weather.
function get_weather_intensity()
if world.weather_id <= 3 then
return 0
else
return (world.weather_id % 2) + 1
end
end
function is_trust_party()
-- Check if we're solo
if party.count == 1 then
return false
end
-- Can call a max of 3 Trust NPCs, so parties larger than that are out.
if party.count > 4 then
return false
end
-- If we're in an alliance, can't be a Trust party.
if alliance[2].count > 0 or alliance[3].count > 0 then
return false
end
-- Check that, for each party position aside from our own, the party
-- member has one of the Trust NPC names, and that those party members
-- are flagged is_npc.
for i = 2,4 do
if party[i] then
if not npcs.Trust:contains(party[i].name) then
return false
end
if party[i].mob and party[i].mob.is_npc == false then
return false
end
end
end
return true
end
-------------------------------------------------------------------------------------------------------------------
-- Gear utility functions.
-------------------------------------------------------------------------------------------------------------------
-- Pick an item to use based on required elemental properties.
-- Cycles through the list of all elements until it matches one of the
-- provided elements to search, and checks whether an appropriate item
-- of that type exists in inventory. If so, uses that.
-- It may optionally provide a list of valid elements, rather than
-- searching all possible elements.
-- Returns the item var if it found a match and the item was in inventory.
function select_elemental_item(itemvar, itemtype, elements_to_search, valid_elements)
local elements_list = valid_elements or elements.list
for _,element in ipairs(elements_list) do
if elements_to_search:contains(element) and player.inventory[gear_map[itemtype][element]] then
itemvar.name = gear_map[itemtype][element]
return itemvar
end
end
end
-- Function to get an appropriate gorget and belt for the current weaponskill.
function set_weaponskill_gorget_belt(spell)
if spell.type ~= 'WeaponSkill' then
return
end
-- Get the union of all the skillchain elements for the weaponskill
local weaponskill_elements = S{}:
union(skillchain_elements[spell.wsA]):
union(skillchain_elements[spell.wsB]):
union(skillchain_elements[spell.wsC])
-- Hook to the default gear vars, if available.
local gorget = gear.ElementalGorget or {name=""}
gorget.name = gear.default.weaponskill_neck or ""
local belt = gear.ElementalBelt or {name=""}
belt.name = gear.default.weaponskill_waist or ""
select_elemental_item(gorget, 'Gorget', weaponskill_elements)
select_elemental_item(belt, 'Belt', weaponskill_elements)
return gorget, belt
end
-- Function to get an appropriate obi/cape/ring for the current spell.
function set_spell_obi_cape_ring(spell)
if spell.element == 'None' then
return
end
local world_elements = S{}
world_elements:add(world.weather_element)
world_elements:add(world.day_element)
local obi = gear.ElementalObi or {name=""}
obi.name = gear.default.obi_waist or ""
local cape = gear.ElementalCape or {name=""}
cape.name = gear.default.obi_back or ""
local ring = gear.ElementalRing or {name=""}
ring.name = gear.default.obi_ring or ""
local got_obi = select_elemental_item(obi, 'Obi', S{spell.element}, world_elements)
if got_obi then
if player.inventory['Twilight Cape'] then
cape.name = "Twilight Cape"
end
if player.inventory['Zodiac Ring'] and spell.english ~= 'Impact' and
not S{'DivineMagic','DarkMagic','HealingMagic'}:contains(spell.skill) then
ring.name = "Zodiac Ring"
end
end
return obi, cape, ring
end
-- Function to get an appropriate gorget and belt for the current weaponskill.
function set_fastcast_staff(spell)
if spell.action_type ~= 'Magic' then
return
end
local staff = gear.FastcastStaff or {name=""}
if gear_map['FastcastStaff'][spell.element] and player.inventory[gear_map['FastcastStaff'][spell.element]] then
staff.name = gear_map['FastcastStaff'][spell.element]
else
staff.name = gear.default.fastcast_staff or ""
end
return staff
end
-- Function to get an appropriate gorget and belt for the current weaponskill.
function set_recast_staff(spell)
if spell.action_type ~= 'Magic' then
return
end
local staff = gear.RecastStaff or {name=""}
if gear_map['RecastStaff'][spell.element] and player.inventory[gear_map['RecastStaff'][spell.element]] then
staff.name = gear_map['RecastStaff'][spell.element]
else
staff.name = gear.default.recast_staff or ""
end
return staff
end
-------------------------------------------------------------------------------------------------------------------
-- Function to easily change to a given macro set or book. Book value is optional.
-------------------------------------------------------------------------------------------------------------------
function set_macro_page(set,book)
if not tonumber(set) then
add_to_chat(123,'Error setting macro page: Set is not a valid number ('..tostring(set)..').')
return
end
if set < 1 or set > 10 then
add_to_chat(123,'Error setting macro page: Macro set ('..tostring(set)..') must be between 1 and 10.')
return
end
if book then
if not tonumber(book) then
add_to_chat(123,'Error setting macro page: book is not a valid number ('..tostring(book)..').')
return
end
if book < 1 or book > 20 then
add_to_chat(123,'Error setting macro page: Macro book ('..tostring(book)..') must be between 1 and 20.')
return
end
send_command('@input /macro book '..tostring(book)..';wait .1;input /macro set '..tostring(set))
else
send_command('@input /macro set '..tostring(set))
end
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions for including local user files.
-------------------------------------------------------------------------------------------------------------------
-- Attempt to load user gear files in place of default gear sets.
-- Return true if one exists and was loaded.
function load_user_gear(job)
if not job then return false end
-- filename format example for user-local files: whm_gear.lua, or playername_whm_gear.lua
local filenames = {player.name..'_'..job..'_gear.lua', job..'_gear.lua'}
return optional_include(filenames)
end
-- Attempt to include user-globals. Return true if it exists and was loaded.
function load_user_globals()
local filenames = {'user-globals.lua'}
return optional_include(filenames)
end
-- Optional version of include(). If file does not exist, does not
-- attempt to load, and does not throw an error.
-- filenames takes an array of possible file names to include and checks
-- each one.
function optional_include(filenames)
for _,v in pairs(filenames) do
local path = gearswap.pathsearch({v})
if path then
include(v)
return true
end
end
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions for vars or other data manipulation.
-------------------------------------------------------------------------------------------------------------------
-- Attempt to locate a specified name within the current alliance.
function find_player_in_alliance(name)
for i,v in ipairs(alliance) do
for k,p in ipairs(v) do
if p.name == name then
return p
end
end
end
end
-- Invert a table such that the keys are values and the values are keys.
-- Use this to look up the index value of a given entry.
function invert_table(t)
if t == nil then error('Attempting to invert table, received nil.', 2) end
local i={}
for k,v in pairs(t) do
i[v] = k
end
return i
end
-- Gets sub-tables based on baseSet from the string str that may be in dot form
-- (eg: baseSet=sets, str='precast.FC', this returns sets.precast.FC).
function get_expanded_set(baseSet, str)
local cur = baseSet
for i in str:gmatch("[^.]+") do
cur = cur[i]
end
return cur
end
VIP
Server: Fenrir
Game: FFXI
Posts: 764
By Fenrir.Motenten 2014-02-08 21:38:46
Ah, that's the resource expansion that's being done, and I was messing around with. Probably not on live yet.
In Mote-Utility, uncomment lines 132-133, and comment out 135-141. I'll adjust to make sure that's only on the dev branch.
Ragnarok.Mixi
Server: Ragnarok
Game: FFXI
Posts: 4
By Ragnarok.Mixi 2014-02-09 05:26:57
thanks, both of you, its working now.
Ragnarok.Liteholt
Server: Ragnarok
Game: FFXI
Posts: 70
By Ragnarok.Liteholt 2014-02-16 12:01:09
Just as a procedural question, I'm guessing that for the Manibozho pieces, all of them are augmented with the Attack path? And which two augments are best for Moonshade Earring (since you have it listed for the Rudra's Storm set, which I hope to be able to see in action someday, currently still on Glavoid Shells)?
For the Iuitl set, what sorts of augments should I look for as "ideal"? I haven't played around much with augmenting them, I have Crit Rate +1 PDT-1% on the head, PDT-3% on the feet, and I think PDT-3% and Recycle+1 on the body (which I know isn't needed for DNC, but I can never get a higher PDT any time I try).
ETA: For the Demon's Ring, I'm guessing look for high MAB and high Magic Crit?
By Fasaga 2014-03-11 01:40:28
this question doesn't pertain to dnc so much as other mage jobs in relation to playing with gearswap. I just made the transition over and its awesome, the only thing I can't figure out is that it seems when spellcast is loaded even with a blank xml gearswap won't work. Is there any way to get gearswap to work with spellcast loaded? I like to be able to just //haste etc.
Server: Ragnarok
Game: FFXI
Posts: 50
By Ragnarok.Mswildfire 2014-03-11 01:42:25
this question doesn't pertain to dnc so much as other mage jobs in relation to playing with gearswap. I just made the transition over and its awesome, the only thing I can't figure out is that it seems when spellcast is loaded even with a blank xml gearswap won't work. Is there any way to get gearswap to work with spellcast loaded? I like to be able to just //haste etc.
You need to use shortcuts. It's in the addons also.
By Fasaga 2014-03-11 01:45:30
Ragnarok.Mswildfire said: »this question doesn't pertain to dnc so much as other mage jobs in relation to playing with gearswap. I just made the transition over and its awesome, the only thing I can't figure out is that it seems when spellcast is loaded even with a blank xml gearswap won't work. Is there any way to get gearswap to work with spellcast loaded? I like to be able to just //haste etc.
You need to use shortcuts. It's in the addons also. Thanks!
Phoenix.Baelorn
Server: Phoenix
Game: FFXI
Posts: 857
By Phoenix.Baelorn 2014-03-11 02:25:47
Is there any easy way to add a new Offense Mode?
By Jurant 2014-03-15 05:39:38
find the part that looks like this
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
-- Options: Override default values
options.OffenseModes = {'None', 'Normal'}
options.DefenseModes = {'Normal'}
options.WeaponskillModes = {'Normal'}
options.CastingModes = {'Normal', 'Resistant', 'Dire'}
options.IdleModes = {'Normal', 'PDT'}
options.RestingModes = {'Normal'}
options.PhysicalDefenseModes = {'PDT'}
options.MagicalDefenseModes = {'MDT'}
state.Defense.PhysicalMode = 'PDT'
state.OffenseMode = 'None'
Add in your set names.
Server: Ragnarok
Game: FFXI
Posts: 50
By Ragnarok.Mswildfire 2014-03-15 06:09:10
For some reason using Motes MNK file when I'm in Limbus it won't use my engaged body but changes everything else, I wondered if it was to do with the weather in there but it only does it every now and again. So sometimes it will equip my normal TP body and other times it changes everything but I remain in my idle body, anyone else have this problem?
By Jurant 2014-03-15 17:17:36
Maybe the Impetus body rule? I changed it to my regular TP body. Have not used inlimbus tho
Server: Ragnarok
Game: FFXI
Posts: 50
By Ragnarok.Mswildfire 2014-03-15 18:05:59
Oh my that's more than likely it I think cause I don't have AF3+2 body yet, lol..
Phoenix.Baelorn
Server: Phoenix
Game: FFXI
Posts: 857
By Phoenix.Baelorn 2014-03-16 04:21:16
find the part that looks like this
That did it. Thanks!
Carbuncle.Doryll
Server: Carbuncle
Game: FFXI
By Carbuncle.Doryll 2014-03-16 13:25:06
I tried the Blm.lua , it seems work very well except when i want cast the spells : Sleepga & Sleepga II
"Doryll cannot cast Sleepga"
I searched why, but nothing in the lua.. it's the 2 only spell i can't cast with my blm.
Someone can help me please ?
Leviathan.Lunazetha
Server: Leviathan
Game: FFXI
Posts: 136
By Leviathan.Lunazetha 2014-03-22 03:42:17
hey guys ty for this, im learning to use GS atm
since im using spellcast from 2 months ago
(im such a noob)
have a stupid question =P
what i need to write and where to charge my 2 GS on my chars? (atm GS autoload only 1 char files)
whit spellscast my first char autoload the files and was using "//SC load" for my second char files
ty vm for all the info.
Work in Progress...
Alright... as a follow up to my Spellcast for Dummies, here is the next stage in Dancer Technology Evolution Stuff...
I don't know much at all about GearSwap, but I've figured out how to get it to do what my old Spellcast use to do, as well as surpass it's usefulness in many other areas. It's also quicker, but probably the most impressive thing, to me at least, is that because Dancer can so easily hit the delay cap, Gearswap can and does, automatically change your gear each time a specified buff is active or wears off.
So, for example, A Victory March + Haste Samba is already enough for a Dancer to hit the cap. Because of this, you'll gain more Damage, by removing Dual Wield gear, and a more beneficial stat, since Dual Wield is no longer making you attack faster, because you've reached the cap.
Anywho, long story short, when it recognizes that Victory March has been cast on you, it will trigger your 'High Haste' gear set, without any input or command from you.
So, I'm going to start with the basics, which means I'll talk to you as if you were a child, because when it comes to all of this coding, that's how I wish people would explain it to me!
Step 0: Stuff I assume everyone has, but just in case...
A: Windower 4
Download Here: http://www.windower.net/
This is the program that makes all of the fancy applications work.
B: Notepad ++
Download Here: http://notepad-plus-plus.org/
This is the program that you use to actually create and edit the 'code' that spellcast uses and runs off of. For all intents and purposes, it's no more than a word document really.
Step 1: Obtaining Gearswap
Open Windower as usual. Before selecting a Profile, click “Addons”, scroll down until you see “GearSwap” and click the Download Button. Afterwards, ensure the Toggle Switch in in the “On” position, and then start FFXI as you always do.
Step 2: File Management
I use Windows 7, other Operating Systems may be slightly different, but should be close.
Right Click ‘Start’
Select “Windows Explorer”
Local Disk C:
Program Files (x86)
Windower4
Addons
GearSwap
Data
Once in the Data Folder, there should only be the ‘Instructions’ text file. (If I recall correctly)
From here, we now need to acquire Motenten’s Fancy Magic Files and place them into this “Data” folder.
They can be found at this link: https://github.com/Kinematics/GearSwap-Jobs
At the link above, there are 5 files you absolutely need.
You can either download them, or create new files within Notepad++, Copy/Paste and save them the exact way he has them listed.
The First 5 files you need are:
Mote-Globals
Mote-Include
Mote-Mappings
Mote-SelfCommands
Mote-Utility
And for us Dancers also:
Dnc
They all need to be labeled exactly as above, and saved as .lua files.
You do NOT alter these you your characters name, they will remain Mote- forever.
*The Dnc.lua file you can alter to your character’s name. This is only technically necessary if you use multiple characters but Cambion_Dnc will work, just like the plain Dnc will.
Step 2 (b): File Management Part 2
From there, we will now right click the “Dnc.lua” file and select “Open With Notepad++”
Once inside, you’ll now be able to view Mote’s Dnc “gearswap”. This .lua file has all of the Job Specific stuff related to Dnc as well as gear sets, rules, triggers, etc etc. The previous 5 files have… all sorts of stuff that’s far beyond my comprehension, but that apply to all of the jobs in the game and are universal. I recommend you don’t worry about them for now.
From the file as is today (2/3/14) you’ll want to scroll down to line 67.
In case the lines get pushed up/down over time, you’re looking for the following text: Code --------------------------------------
-- Start defining the sets
--------------------------------------
From here, you want to Highlight from the beginning of line 67 all the way down to line 303.
For those reading at a later date, you’re looking for the very first line, that simply says “end” and you want to stop just ABOVE the “end”. DO NOT include the “end” in your copy/paste. This is very important, and it can/will/has caused issues.
Every thing you’ve highlighted should be the numerous gearsets that we’ll be able to alter to our preference down the road. For the time being ‘Copy’ the entire text, and then ‘Delete’ it from the current file.
Create a new Notepad++ file and “Paste” what you just copy/deleted from the original Dnc.lua.
Now save this file as Dnc_Gear as a lua file. Alternatively, if you decided to use your character name, you’ll want to save this as Cambion_Dnc_Gear.
So in your Data file you should either have
A: Cambion_Dnc & Cambion_Dnc_Gear
or
B: Dnc & Dnc_Gear
both as lua files, along with the initial 5 files from Step 2 (a)
What we’ve just done, is separate our “gear” from our actual programming file.
I recommend doing this, so that any time there is an update to gearswap, that requires you to download the newest Dnc.lua from Mote’s files, you’ll be able to simply remove his gear sets, and continue using the one’s you’ve already customized.
|
|