I have tried adding sets as per the SAM files and it just returns nil in console when I try to reload the changes. I realise I wasn't being clear, if I try and load the file with engaged.Adoulin.AM3 it will error and adoulin is a nil value, engaged.AM3.Adoulin doesn't raise and error, it just doesn't recognise the set.
I have added all the combat form related functions straight over from the SAM file but it doesn't do it.
Is what I have added in an attempt to make it work but Adoulin is still a nil value.Code:function init_gear_sets() state.CombatForm = get_combat_form() --Added this within the existing job_update function function job_update(cmdParams, eventArgs) state.CombatForm = get_combat_form() function get_combat_form() if areas.Adoulin:contains(world.area) and buffactive.ionis then return 'Adoulin' end end
I have tried adding sets as per the SAM files and it just returns nil in console when I try to reload the changes.This statement doesn't make any sense. What, exactly, is returning nil? To 'return' something means a function call was made, but you're not specifying any particular function. You also refer to 'Adoulin' being nil, which also doesn't make any sense. 'Adoulin' is a string. By definition it cannot be nil. Adoulin (non-string version) being nil has no meaning because Adoulin is not a variable name, and thus it also cannot be nil.Is what I have added in an attempt to make it work but Adoulin is still a nil value.
At best I can guess that the error you're actually seeing is something along the lines of "Cannot index sets.engaged.Adoulin; value is nil", which is an error indicating that it's trying to expand the table defined by the series of keys "sets", "engaged" and "Adoulin", to get the next key "AM3", or something similar. Also note that 'sets.engaged.Adoulin' is absolutely not the same thing as 'Adoulin' by itself.
You also refer in your first post to the "selfmapping" lines 420 and 392:
There is no "selfmapping" file. There is Mote-Mappings (which only has 209 lines, so can't be that), and there is Mote-SelfCommands.I get errors on the selfmapping lines 420 and 392 (these may vary very slightly from where they appear in the stock selfmappings file because i delete some of the add to chats)
Since the line numbers are useless due to your modifying the file, you'll need to actually provide the lines in question (and the actual file name, to be sure) for me to have any clue as to what you might be talking about.
You also indicated that the error comes up as soon as you load the file. If that is the case, and it's referencing the sets.engaged.Adoulin line or similar, and you're not engaged at the time of the reload, that indicates that it's a syntax error on your part. If this is not the case, then, again, you need to be clearer in describing what is actually happening.
ok how else can i do this problem
4+20%=5
all i can think of is
4+(4*0.25)=5
but its hard to do if this is your math
(3+1)+25%
Yes I am choosing my words poorly.
The error is "attempt to index field 'Adoulin' (a nil value)" that occurs when I gs reload.
the set causing the error is sets.engaged.Adoulin.AM3
Once I've reloaded with these changes and seen that error any time I try and use a gs c command I recieve 2 errors from the Mote-SelfCommands which are "attempt to call global 'handle_equipping_gear' (a nil value) and "attempt to get current_melee_set' (a nil value)"
1) Are you engaged when you reload? If you are not, then there's some other problem going on as well.
2) If handle_equipping_gear is missing, then something has messed up the base Mote-Include file, and it's surprising that anything works at all. That function (and get_current_melee_set) should exist in Mote-Include, not your job file. Since you should not be editing any file aside from your job file (or sidecar file), there's no reason it should be getting messed up.
However, since you said you'd deleted stuff from Mote-SelfCommands, I must consider the possibility that you edited Mote-Include as well, or that the editing you did messed up the function separation within Mote-SelfCommands such that they're not running the way they're supposed to be, and cause Mote-Include to not be fully instantiated, or that an error occurred during initialization due to the changes that caused the rest of Mote-Include to be skipped on startup.
As such, the primary suggestion I have is that you re-download the entire suite of Mote-* files and try again.
If the problem persists, then further debugging work is needed.
I can assure you that it does work. I use it heavily in all of my mage gearswaps. I hadn't considered the multiple missing levels though, which is apparently why it didn't work for Sechs.
In my mage lua files I even do some equips with multiple conditional statements such as
equip(sets[spell.skill][spell_group] or sets[spell.skill][spell.english] or {}) and it works perfectly for me. spell_group is a self defined variable.
Is there a problem with GS atm? I noticed i wasnt swapping any gear during unbridled learning/wisdom on BLU yesterday and now im not swapping gear for any spells and i get a error message, everything else works fine. Somone from my LS said they were having problems too
BlueMagic became "Blue Magic"
If you are using one of Motenten's templates, you will need to update it.
I believe motenten's has updated his tables as well. I redownloaded the shared files across all jobs and have not been getting errors on NIN WHM BLU RNG(I wrote with template).
cool thanks, so its just a matter of changing everything in my lua thats BlueMagic to Blue Magic and re-downloading the 5 mote files?
So I recently returned and started using gear swap and everything seems to be working minus putting on my nuking gear midcast before my elemental magic goes off. It seems to work for spells like frost and rasp and my higher tier nukes t4,5,ga3,ja but not any lower tier spells. Any help would be appreciated
this is my .xml
-------------------------------------------------------------------------------------------------------------------
-- 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
-- Setup vars that are user-independent.
function job_setup()
end
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
-- Options: Override default values
options.CastingModes = {'Normal', 'Resistant', 'Proc'}
options.OffenseModes = {'None', 'Normal'}
options.DefenseModes = {'Normal'}
options.WeaponskillModes = {'Normal'}
options.IdleModes = {'Normal', 'PDT'}
options.RestingModes = {'Normal'}
options.PhysicalDefenseModes = {'PDT'}
options.MagicalDefenseModes = {'MDT'}
state.Defense.PhysicalMode = 'PDT'
state.OffenseMode = 'None'
-- Default macro set/book
set_macro_page(1, 15)
end
-- Called when this job file is unloaded (eg: job change)
function file_unload()
if binds_on_unload then
binds_on_unload()
end
end
-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Start defining the sets
--------------------------------------
---- Precast Sets ----
-- Precast sets to enhance JAs
sets.precast.JA['Mana Wall'] = {feet="Goetia Sabots +2"}
sets.precast.JA.Manafont = {body="Sorcerer's Coat +2"}
-- equip to maximize HP (for Tarus) and minimize MP loss before using convert
sets.precast.JA.Convert = {}
-- Fast cast sets for spells
sets.precast.FC = {
head="Kaabanax Hat",neck="Jeweled Collar",ear2="Loquacious Earring",
body="Anhur Robe",ring1="Prolix Ring",
back="Swith Cape",waist="Witful Belt",legs="Wayfarer Slops",feet="Chelona Boots"}
sets.precast.FC.EnhancingMagic = set_combine(sets.precast.FC, {waist="Siegel Sash"})
sets.precast.FC.ElementalMagic = set_combine(sets.precast.FC, {head="Goetia Petasos +2"})
sets.precast.FC.Cure = set_combine(sets.precast.FC, {body="Anhur Robe", back="Pahtli Cape"})
sets.precast.FC.Curaga = sets.precast.FC.Cure
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {}
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
sets.precast.WS['Vidohunir'] = {}
---- Midcast Sets ----
sets.midcast.FastRecast = {
head="Nahtirah Hat",ear2="Loquacious Earring",
body="Vanir Cotehardie",hands="Bokwus Gloves",ring1="Prolix Ring",
back="Swith Cape",waist="Witful Belt",legs="Hagondes Pants",feet="Hagondes Sabots"}
sets.midcast.Cure = {main="Chatoyant Staff",
head="Nahtirah Hat",neck="Colossus's Torque",ear1="Lifestorm Earring",ear2="Loquacious Earring",
body="Anhur Robe",hands="Bokwus Gloves",ring1="Ephedra Ring",ring2="Sirona's Ring",
back="Pahtli Cape",waist=gear.ElementalObi,legs="Nares Trews",feet="Hagondes Sabots"}
sets.midcast.Curaga = sets.midcast.Cure
sets.midcast.EnhancingMagic = {
head="Umuthi Hat",neck="Colossus's Torque",
body="Anhur Robe",hands="Ayao's Gages",
waist="Siegal Sash",legs="Portent Pants"}
sets.midcast.Stoneskin = set_combine(sets.midcast.EnhancingMagic, {waist="Siegel Sash"})
sets.midcast.EnfeeblingMagic = {main="Eminent Staff",sub="Mephitis Grip",ammo="Sturm's Report",
head="Kaabanax Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
body="Wayfarer Robe",hands="Yaoyotl Gloves",ring1="Strendu Ring",ring2="Sangoma Ring",
back="Bane Cape",waist="Demonry Sash",legs="Wayfarer Slops",feet="Wayfarer Clogs"}
sets.midcast.ElementalEnfeeble = sets.midcast.EnfeeblingMagic
sets.midcast.DarkMagic = {main="Eminent Staff",sub="Mephitis Grip",ammo="Sturm's Report",
head="Kaabanax Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
body="Wayfarer Robe",hands="Yaoyotl Gloves",ring1="Strendu Ring",ring2="Sangoma Ring",
back="Bane Cape",waist="Demonry Sash",legs="Wayfarer Slops",feet="Goetia Sabots +2"}
sets.midcast.Drain = {main="Eminent Staff",sub="Mephitis Grip",ammo="Sturm's Report",
head="Nahtirah Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
body="Vanir Cotehardie",hands="Yaoyotl Gloves",ring1="Excelsis Ring",ring2="Sangoma Ring",
back="Bane Cape",waist="Demonry Sash",legs="Wayfarer Slops",feet="Goetia Sabots +2"}
sets.midcast.Aspir = sets.midcast.Drain
sets.midcast.Stun = {main="Atinian Staff",sub="Mephitis Grip",ammo="Sturm's Report",
head="Kaabanax Hat",neck="Eddy Necklace",ear1="Psystorm Earring",ear2="Lifestorm Earring",
body="Wayfarer Robe",hands="Yaoyotl Gloves",ring1="Strendu Ring",ring2="Sangoma Ring",
back="Bane Cape",waist="Witful Belt",legs="Wayfarer Slops",feet="Wayfarer Clogs"}
sets.midcast.BardSong = {main="Atinian Staff",sub="Mephitis Grip",ammo="Sturm's Report",
head="Nahtirah Hat",neck="Weike Torque",ear1="Psystorm Earring",ear2="Lifestorm Earring",
body="Vanir Cotehardie",hands="Yaoyotl Gloves",ring1="Strendu Ring",ring2="Sangoma Ring",
back="Refraction Cape",legs="Bokwus Slops",feet="Bokwus Boots"}
-- Elemental Magic sets are default for handling low-tier nukes.
sets.midcast.ElementalMagic = {main="Eminent Staff",sub="Mephitis Grip",ammo="Witchstone",
head="Kaabanax Hat",neck="Eddy Necklace",ear1="Hecate's Earring",ear2="Moldavite Earring",
body="Wayfarer Robe",hands="Yaoyotl Gloves",ring1="Locus Ring",ring2="Spiral Ring",
back="Bane Cape",waist="Oneiros Sash",legs="Wayfarer Slops",feet="Wayfarer Clogs"}
sets.midcast.ElementalMagic.Resistant = {main="Eminent Staff",sub="Mephitis Grip",ammo="Witchstone",
head="Kaabanax Hat",neck="Eddy Necklace",ear1="Hecate's Earring",ear2="Moldavite Earring",
body="Wayfarer Robe",hands="Yaoyotl Gloves",ring1="Locus Ring",ring2="Spiral Ring",
back="Bane Cape",waist="Oneiros Sash",legs="Wayfarer Slops",feet="Wayfarer Clogs"}
-- Idle set when doing procs. Fast cast gear, minimal nuke gear. Won't change out of this for nukes.
sets.midcast.ElementalMagic.Proc = {main="Eminent Staff",sub="Mephitis Grip",ammo="Witchstone",
head="Kaabanax Hat",neck="Eddy Necklace",ear1="Hecate's Earring",ear2="Moldavite Earring",
body="Wayfarer Robe",hands="Yaoyotl Gloves",ring1="Locus Ring",ring2="Spiral Ring",
back="Bane Cape",waist="Oneiros Sash",legs="Wayfarer Slops",feet="Wayfarer Clogs"}
-- Custom classes for high-tier nukes.
sets.midcast.HighTierNuke = {main="Eminent Staff",sub="Mephitis Grip",ammo="Witchstone",
head="Kaabanax Hat",neck="Eddy Necklace",ear1="Hecate's Earring",ear2="Moldavite Earring",
body="Wayfarer Robe",hands="Yaoyotl Gloves",ring1="Locus Ring",ring2="Spiral Ring",
back="Bane Cape",waist="Oneiros Sash",legs="Wayfarer Slops",feet="Wayfarer Clogs"}
sets.midcast.HighTierNuke.Resistant = {main="Eminent Staff",sub="Mephitis Grip",ammo="Witchstone",
head="Kaabanax Hat",neck="Eddy Necklace",ear1="Hecate's Earring",ear2="Moldavite Earring",
body="Wayfarer Robe",hands="Yaoyotl Gloves",ring1="Locus Ring",ring2="Spiral Ring",
back="Bane Cape",waist="Oneiros Sash",legs="Wayfarer Slops",feet="Wayfarer Clogs"}
-- Custom classes for high-tier nukes in Adoulin areas (need more general magic accuracy).
sets.midcast.AdoulinHighTierNuke = {main="Eminent Staff",sub="Mephitis Grip",ammo="Witchstone",
head="Kaabanax Hat",neck="Eddy Necklace",ear1="Hecate's Earring",ear2="Moldavite Earring",
body="Wayfarer Robe",hands="Yaoyotl Gloves",ring1="Locus Ring",ring2="Spiral Ring",
back="Bane Cape",waist="Oneiros Sash",legs="Wayfarer Slops",feet="Wayfarer Clogs"}
sets.midcast.AdoulinHighTierNuke.Resistant = {main="Eminent Staff",sub="Mephitis Grip",ammo="Witchstone",
head="Kaabanax Hat",neck="Eddy Necklace",ear1="Hecate's Earring",ear2="Moldavite Earring",
body="Wayfarer Robe",hands="Yaoyotl Gloves",ring1="Locus Ring",ring2="Spiral Ring",
back="Bane Cape",waist="Oneiros Sash",legs="Wayfarer Slops",feet="Wayfarer Clogs"}
-- Sets to return to when not performing an action.
-- Resting sets
sets.resting = {main="Chatoyant Staff",ammo="Clarus Stone",
head="Kaabanax Hat",neck="Grandiose Chain",
body="Goetia Coat +2",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
waist="Hierarchy Belt",legs="Nares Trews",feet="Serpentes Sabots"}
-- Idle sets
-- Normal refresh idle set
sets.idle = {main="Owleyes", sub="Sors Shield",ammo="Witchstone",
head="Kaabanax Hat",neck="Wiglen Gorget",ear1="Ethereal Earring",ear2="Loquacious Earring",
body="Goetia Coat +2",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Iximulew Cape",waist="Hierarch Belt",legs="Nares Trews",feet="Serpentes Sabots"}
-- Idle mode that keeps PDT gear on, but doesn't prevent normal gear swaps for precast/etc.
sets.idle.PDT = {main="Owleyes", sub="Sors Shield",ammo="Witchstone",
head="Kaabanax Hat",neck="Wiglen Gorget",ear1="Ethereal Earring",ear2="Loquacious Earring",
body="Goetia Coat +2",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Iximulew Cape",waist="Hierarch Belt",legs="Nares Trews",feet="Serpentes Sabots"}
-- Idle mode scopes:
-- Idle mode when weak.
sets.idle.Weak = {main="Owleyes", sub="Sors Shield",ammo="Witchstone",
head="Kaabanax Hat",neck="Wiglen Gorget",ear1="Ethereal Earring",ear2="Loquacious Earring",
body="Goetia Coat +2",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Iximulew Cape",waist="Hierarch Belt",legs="Nares Trews",feet="Serpentes Sabots"}
-- Town gear.
sets.idle.Town = {main="Owleyes", sub="Sors Shield",ammo="Witchstone",
head="Kaabanax Hat",neck="Wiglen Gorget",ear1="Ethereal Earring",ear2="Loquacious Earring",
body="Goetia Coat +2",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Iximulew Cape",waist="Hierarch Belt",legs="Nares Trews",feet="Serpentes Sabots"}
-- Defense sets
sets.defense.PDT = {main="Earth Staff",sub="Wizzan Grip",
head="Nahtirah Hat",neck="Twilight Torque",
body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Dark Ring",ring2="Dark Ring",
back="Umbra Cape",waist="Hierarch Belt",legs="Hagondes Pants",feet="Hagondes Sabots"}
sets.defense.MDT = {ammo="Demonry Stone",
head="Nahtirah Hat",neck="Twilight Torque",
body="Vanir Cotehardie",hands="Yaoyotl Gloves",ring1="Dark Ring",ring2="Shadow Ring",
back="Tuilha Cape",waist="Hierarch Belt",legs="Bokwus Slops",feet="Hagondes Sabots"}
sets.Kiting = {feet="Herald's Gaiters"}
-- Buff sets: Gear that needs to be worn to actively enhance a current player buff.
sets.buff['Mana Wall'] = {feet="Goetia Sabots +2"}
-- 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 = {
head="Zelus Tiara",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Hagondes Coat",hands="Bokwus Gloves",ring1="Rajas Ring",ring2="K'ayres Ring",
back="Umbra Cape",waist="Goading Belt",legs="Hagondes Pants",feet="Hagondes Sabots"}
lowTierNukes = S{'Stone', 'Water', 'Aero', 'Fire', 'Blizzard', 'Thunder',
'Stone II', 'Water II', 'Aero II', 'Fire II', 'Blizzard II', 'Thunder II',
'Stone III', 'Water III', 'Aero III', 'Fire III', 'Blizzard III', 'Thunder III',
'Stonega', 'Waterga', 'Aeroga', 'Firaga', 'Blizzaga', 'Thundaga',
'Stonega II', 'Waterga II', 'Aeroga II', 'Firaga II', 'Blizzaga II', 'Thundaga II'}
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)
if spellMap == 'Cure' or spellMap == 'Curaga' then
gear.default.obi_waist = "Goading Belt"
elseif spell.skill == 'Elemental Magic' then
gear.default.obi_waist = "Sekhmet Corset"
end
end
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_midcast(spell, action, spellMap, eventArgs)
if spell.action_type == 'Magic' then
-- Default base equipment layer is fast recast.
equip(sets.midcast.FastRecast)
if spell.skill == 'Elemental Magic' then
if state.CastingMode == 'Proc' then
add_to_chat(15,'Proc mode, no damage gear for midcast.')
eventArgs.handled = true
else
classes.CustomClass = get_nuke_class(spell, action, spellMap)
end
end
end
end
function job_aftercast(spell, action, spellMap, eventArgs)
-- Lock feet after using Mana Wall.
if not spell.interrupted and spell.english == 'Mana Wall' and player.equipment.feet == "Goetia Sabots +2" then
disable('feet')
end
end
-------------------------------------------------------------------------------------------------------------------
-- Customization hooks for idle and melee sets, after they've been automatically constructed.
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-- 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)
-- Unlock feet when Mana Wall buff is lost.
if buff == "Mana Wall" and not gain then
enable('feet')
handle_equipping_gear(player.status)
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements self-commands.
-------------------------------------------------------------------------------------------------------------------
-- Handle notifications of general user state change.
function job_state_change(stateField, newValue)
if stateField == 'OffenseMode' then
if newValue == 'Normal' then
disable('main','sub')
else
enable('main','sub')
end
elseif stateField == 'Reset' then
if state.OffenseMode == 'None' then
enable('main','sub')
end
end
end
-- Function to display the current relevant user state when doing an update.
-- Return true if display was handled, and you don't want the default info shown.
function display_current_job_state(eventArgs)
local meleeString = ''
if state.OffenseMode == 'Normal' then
meleeString = 'Melee: Weapons locked, '
end
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
add_to_chat(122,meleeString..'Casting ['..state.CastingMode..'], Idle ['..state.IdleMode..'], '..defenseString..
'Kiting: '..on_off_names[state.Kiting])
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
-- Function to get the custom class to use for nukes.
function get_nuke_class(spell, action, spellMap)
if lowTierNukes[spell.english] then
-- low tier nukes use the default set
return nil
else
return 'HighTierNuke'
end
end
@ukkos:
1) Put code you post on the forum in [code] tags.
2) Put large code blocks in [spoiler] tags.
3) Preferably link to pastebin or similar if you can, rather than post entire lua files in the forum.
4) All sets that use spell.skill to define their name (EnhancingMagic, ElementalMagic, etc) need to be changed to 'proper' grammatical form ("Enhancing Magic", "Elemental Magic", etc) due to changes in how they're defined in Windower resources. You'd note an answer to this exact issue just 3 posts above yours, but in relation to Blue Magic.
Did you read the 2 posts literally right above yours? They explain your problem.
Hey mote, im trying to build a runefencer GS using your functionality. What would be the best existing GS you have? Initially I thought DNC, but I think Pld with a modified steps cycle keybind added from your DNC lua would suit RUN better.
If I approach that tonight when I get home, would I need to update any of your universal luas as well?
So id have the core of pld but the cyclic functionality of cycling through runes with your key binds
real quick id like to just point out in the smn.lua; 'thunderstorm' is listed correctly in the BP Variables in the top in all however I'm not experiencing any gearswappage taking place on that particular BP
If someone could go test it out, i think theres a bug or something with that particular BP; I change nothing code-wise on these lua's just gear
There are going to be a few things broken in Mote's lua files due to the change from 'Lightning' to 'Thunder' for the thunder element in the resources files for gearswap. That may or may not be what the problem is here, I don't know, I have trouble following all the nuances of his files sometimes.