-- ** I Use Some of Motenten's Functions ** --
-- Last Updated: 05/03/14 6:30 AM ** --
function get_sets()
AccIndex = 1
AccArray = {"LowACC","MidACC","HighACC"} -- 3 Levels Of Accuracy Sets For Shooting/QD/TP/WS. Default ACC Set Is LowACC. The First TP Set Of Your Main Weapon Is LowACC. Add More ACC Sets If Needed Then Create Your New ACC Below --
IdleIndex = 1
IdleArray = {'Movement', 'Regen'} -- Default Idle Set Is Movement --
Armor = 'None'
define_roll_values()
warning = false
AutoMode = 'OFF' -- Set Default Auto RA/WS ON or OFF Here --
Obi = 'ON' -- Turn Default Obi ON or OFF Here --
ammo_warning_limit = 10 -- Set Ammo Limit Check Here --
target_distance = 5 -- Set Default Distance Here --
select_default_macro_book() -- Change Default Macro Book At The End --
ACC_Shots = S{"Light Shot","Dark Shot"}
Cure_Spells = {"Cure","Cure II","Cure III","Cure IV"} -- Cure Degradation --
Curaga_Spells = {"Curaga","Curaga II"} -- Curaga Degradation --
sc_map = {SC1="CoursersRoll", SC2="DiaII", SC3="LightShot"} -- 3 Additional Binds. Can Change Whatever JA/WS/Spells You Like Here. Remember Not To Use Spaces. --
-- Idle/Town Sets --
sets.Idle = {}
sets.Idle.Regen = {
ammo="Adlivun Bullet",
head="Oce. Headpiece +1",
neck="Bathy Choker +1"}
sets.Idle.Movement = set_combine(sets.Idle.Regen,{
ammo="Adlivun Bullet",
head="Meghanada Visor +1",
neck="Twilight Torque",
ear1="Crematio Earring",
ear2="Sanare Earring",
body="Mekosu. Harness",
hands="Chasseur's Gants +1",
ring1="Paguroidea Ring",
ring2="Defending Ring",
back="Mecisto. Mantle",
waist="Sweordfaetels +1",
legs="Carmine Cuisses +1",
feet="Meg. Jam. +1"})
-- QD Sets --
sets.QD = {
ammo="Animikii Bullet",
head="Lak. Hat +1",
neck="Deviant Necklace",
ear1="Crematio Earring",
ear2="Friomisi Earring",
body="Samnuha Coat",
hands="Leyline Gloves",
ring1="Garuda Ring +1",
ring2="Arvina Ringlet +1",
back="Camulus's Mantle",
waist="Salire Belt",
legs="Lak. Trews +1",
feet="Adhemar Gamashes"}
-- PDT/MDT Sets --
sets.PDT = {
ammo="Adlivun Bullet",
head="Meghanada Visor +1",
neck="Twilight Torque",
ear1="Suppanomimi",
ear2="Sanare Earring",
body="Meg. Cuirie +1",
hands="Meg. Gloves +1",
ring1="Patricius Ring",
ring2="Defending Ring",
back="Shadow Mantle",
waist="Sailfi Belt +1",
legs="Meg. Chausses +1",
feet="Lanun Bottes +1"}
sets.MDT = set_combine(sets.PDT,{})
-- Roll Set --
sets.Rolls = set_combine(sets.PDT,{
ammo="Adlivun Bullet",
head="Lanun Tricorne +1",
hands="Chasseur's Gants +1",
ring1="Luzaf's Ring",
ring2="Barataria Ring",
back="Camulus's Mantle",
legs="Desultor Tassets"})
-- Preshot --
sets.Preshot = {
ammo="Adlivun Bullet",
head="Chass. Tricorne +1",
body="Pursuer's Doublet",
hands="Lanun Gants +1",
back="Navarch's Mantle",
waist="Impulse Belt",
legs="Adhemar Kecks",
feet="Meg. Jam. +1"}
-- Shooting Base Set --
sets.Midshot = {
ammo="Adlivun Bullet",
head="Meghanada Visor +1",
neck="Ocachi Gorget",
ear1="Tripudio Earring",
ear2="Neritic Earring",
body="Meg. Cuirie +1",
hands="Meg. Gloves +1",
ring1="Rajas Ring",
ring2="Paqichikaji Ring",
back="Gunslinger's Cape",
waist="Sweordfaetels +1",
legs="Adhemar Kecks",
feet="Meg. Jam. +1"}
sets.Midshot.MidACC = set_combine(sets.Midshot,{})
sets.Midshot.HighACC = set_combine(sets.Midshot.MidACC,{
ear1="Clearview Earring",
ring1="Garuda Ring +1"})
-- Melee Sets --
sets.Melee = {
ammo="Adlivun Bullet",
head="Meghanada Visor +1",
neck="Subtlety Spec.",
ear1="Tripudio Earring",
ear2="Brutal Earring",
body="Meg. Cuirie +1",
hands="Meg. Gloves +1",
ring1="Epona's Ring",
ring2="Oneiros Ring",
back="Kayapa Cape",
waist="Sailfi Belt +1",
legs="Meg Chausses +1",
feet="Meg. Jam. +1"}
sets.Melee.MidACC = set_combine(sets.Melee,{})
sets.Melee.HighACC = set_combine(sets.Melee.MidACC,{
ear1="Suppanomimi",
ring1="Patricius Ring",
ring2="Mars's Ring",
legs="Carmine Cuisses +1"})
sets.Melee.Dual = {
ammo="Adlivun Bullet",
head="Taeon Chapeau",
neck="Subtlety Spec.",
ear1="Suppanomimi",
ear2="Brutal Earring",
body="Meg. Cuirie +1",
hands="Floral Gauntlets",
ring1="Epona's Ring",
ring2="Oneiros Ring",
back="Kayapa Cape",
waist="Dynamic Belt +1",
legs="Meg Chausses +1",
feet="Meg. Jam. +1"}
sets.Melee.Dual.MidACC = set_combine(sets.Melee.Dual,{})
sets.Melee.Dual.HighACC = set_combine(sets.Melee.Dual.MidACC,{
ring1="Patricius Ring",
ring2="Mars's Ring",
legs="Carmine Cuisses +1"})
-- WS Base Set --
sets.WS = {}
-- Savage Blade Sets --
sets.WS["Savage Blade"] = {
ammo="Adlivun Bullet",
head="Meghanada Visor +1",
neck="Fotia Gorget",
ear1="Moonshade Earring",
ear2="Brutal Earring",
body="Meg. Cuirie +1",
hands="Meg. Gloves +1",
ring1="Rajas Ring",
ring2="Ifrit Ring +1",
back="Camulus's Mantle",
waist="Fotia Belt",
legs="Meg. Chausses +1",
feet="Meg. Jam. +1"}
sets.WS["Savage Blade"].MidACC = set_combine(sets.WS["Savage Blade"],{})
sets.WS["Savage Blade"].HighACC = set_combine(sets.WS["Savage Blade"].MidACC,{
ring1="Rajas Ring",
ring2="Mars's Ring",
legs="Carmine Cuisses +1"})
-- Last Stand Sets --
sets.WS["Last Stand"] = {
ammo="Adlivun Bullet",
head="Meghanada Visor +1",
neck="Fotia Gorget",
ear1="Neritic Earring",
ear2="Moonshade Earring",
body="Meg. Cuirie +1",
hands="Meg. Gloves +1",
ring1="Garuda Ring +1",
ring2="Ifrit Ring +1",
back="Camulus's Mantle",
waist="Fotia Belt",
legs="Meg. Chausses +1",
feet="Meg. Jam. +1"}
sets.WS["Last Stand"].MidACC = set_combine(sets.WS["Last Stand"],{})
sets.WS["Last Stand"].HighACC = set_combine(sets.WS["Last Stand"].MidACC,{
ring1="Garuda Ring +1",
ring2="Paqichikaji Ring"})
-- Slug Shot Sets --
sets.WS["Slug Shot"] = {
ammo="Adlivun Bullet",
head="Meghanada Visor +1",
neck="Fotia Gorget",
ear1="Neritic Earring",
ear2="Moonshade Earring",
body="Meg. Cuirie +1",
hands="Meg. Gloves +1",
ring1="Garuda Ring +1",
ring2="Ifrit Ring +1",
back="Camulus's Mantle",
waist="Fotia Belt",
legs="Meg. Chausses +1",
feet="Meg. Jam. +1"}
sets.WS["Slug Shot"].MidACC = set_combine(sets.WS["Slug Shot"],{})
sets.WS["Slug Shot"].HighACC = set_combine(sets.WS["Slug Shot"].MidACC,{
ring1="Garuda Ring +1",
ring2="Paqichikaji Ring"})
-- Wildfire Sets --
sets.WS.Wildfire = {
ammo="Orichalc. Bullet",
head="Lanun Tricorne +1",
neck="Deviant Necklace",
ear1="Friomisi Earring",
ear2="Crematio Earring",
body="Samnuha Coat",
hands="Leyline Gloves",
ring1="Garuda Ring +1",
ring2="Arvina Ringlet +1",
back="Camulus's Mantle",
waist="Salire Belt",
legs="Lak. Trews +1",
feet="Adhemar Gamashes"}
-- Leaden Salute Sets --
sets.WS['Leaden Salute'] = {
ammo="Orichalc. Bullet", -- Orichalc. Bullet --
head="Pixie Hairpin +1",
neck="Deviant Necklace",
ear1="Friomisi Earring",
ear2="Moonshade Earring",
body="Samnuha Coat",
hands="Leyline Gloves",
ring1="Archon Ring",
ring2="Arvina Ringlet +1",
back="Camulus's Mantle",
waist="Salire Belt",
legs="Lak. Trews +1",
feet="Adhemar Gamashes"}
sets.WS['Leaden Salute'].MidACC = set_combine(sets.WS['Leaden Salute'],{})
sets.WS['Leaden Salute'].HighACC = set_combine(sets.WS['Leaden Salute'].MidACC,{})
-- Elemental Obi --
sets.Obi = {}
sets.Obi.Thunder = {waist='Rairin Obi'}
sets.Obi.Water = {waist='Suirin Obi'}
sets.Obi.Fire = {waist='Karin Obi'}
sets.Obi.Ice = {waist='Hyorin Obi'}
sets.Obi.Wind = {waist='Furin Obi'}
sets.Obi.Earth = {waist='Dorin Obi'}
sets.Obi.Light = {waist='Korin Obi'}
sets.Obi.Dark = {waist='Anrin Obi'}
-- JA Sets --
sets.JA = {}
sets.JA["Random Deal"] = {body="Lanun Frac +1"}
sets.JA.Fold = {hands="Lanun Gants +1"}
sets.JA["Snake Eye"] = {legs="Lanun Culottes +1"}
sets.JA["Wild Card"] = {feet="Lanun Bottes +1"}
-- Waltz Set --
sets.Waltz = {}
sets.Precast = {}
--Fastcast Set --
sets.Precast.FastCast = {
hands="Leyline Gloves",
ring2="Weather. Ring"}
sets.Midcast = {}
-- Magic Haste Set --
sets.Midcast.Haste = set_combine(sets.PDT,{})
end
function pretarget(spell,action)
if spell.action_type == 'Magic' and buffactive.silence then -- Auto Use Echo Drops If You Are Silenced --
cancel_spell()
send_command('input /item "Echo Drops" <me>')
elseif spell.type == "CorsairRoll" and buffactive[spell.english] then -- Change Any Rolls To Double-Up When You Have A Roll Up --
cancel_spell()
send_command('doubleup')
elseif spell.english == "Seigan" and buffactive.Seigan then -- Change Seigan To Third Eye If Seigan Is On --
cancel_spell()
send_command('ThirdEye')
elseif spell.english == "Meditate" and player.tp > 290 then -- Cancel Meditate If TP Is Above 290 --
cancel_spell()
add_to_chat(123, spell.name .. ' Canceled: ' .. player.tp)
elseif spell.action_type == 'Ranged Attack' then -- Auto WS
if player.tp >= 1000 and AutoMode == 'ON' and not buffactive.amnesia then
cancel_spell()
autoWS()
end
elseif spell.action_type == 'Ranged Attack' and spell.target.distance > 24.9 then
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Out of Range]')
return
elseif spell.type == 'WeaponSkill' and player.status == 'Engaged' then
if spell.skill == 'Marksmanship' then
if spell.target.distance > 16+target_distance then
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Out of Range]')
return
end
else
if spell.target.distance > target_distance then
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Out of Range]')
return
end
end
end
end
function precast(spell,action)
if spell.action_type == 'Ranged Attack' or spell.type == "WeaponSkill" then
if player.equipment.ammo == "Animikii Bullet" then -- Cancel Ranged Attack or WS If You Have Animikii Bullet Equipped --
cancel_spell()
add_to_chat(123, spell.name .. ' Canceled: [Animikii Bullet Equipped!]')
return
else
local check_ammo
local check_ammo_count = 1
if spell.action_type == 'Ranged Attack' then
check_ammo = player.equipment.ammo
if player.equipment.ammo == 'empty' or player.inventory[check_ammo].count <= check_ammo_count then
add_to_chat(123, spell.name..' Canceled: [Out of Ammo]')
cancel_spell()
return
else
equip(sets.Preshot)
if player.inventory[check_ammo].count <= ammo_warning_limit and player.inventory[check_ammo].count > 1 and not warning then
add_to_chat(8, '***** [Low Ammo Warning!] *****')
warning = true
elseif player.inventory[check_ammo].count > ammo_warning_limit and warning then
warning = false
end
end
elseif spell.type == "WeaponSkill" then
if player.status ~= 'Engaged' then -- Cancel WS If You Are Not Engaged. Can Delete It If You Don't Need It --
cancel_spell()
add_to_chat(123,'Unable To Use WeaponSkill: [Disengaged]')
return
else
equipSet = sets.WS
if equipSet[spell.english] then
equipSet = equipSet[spell.english]
end
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
if player.tp > 2999 or buffactive.Sekkanoki then
equipSet = set_combine(equipSet,{ear2="Crematio Earring"})
end
if spell.english == "Leaden Salute" and (world.day == "Darksday") then
add_to_chat('Used Anrin Obi')
equipSet = set_combine(equipSet, {waist="Anrin Obi"})
end
equip(equipSet)
end
end
end
elseif spell.type == "JobAbility" then
if sets.JA[spell.english] then
equip(sets.JA[spell.english])
if spell.english == "Snake Eye" then -- Auto Double-Up After You Use Snake Eye --
send_command('@wait 1;input /ja Double-Up <me>')
end
end
elseif spell.type == "CorsairRoll" or spell.english == "Double-Up" then
equip(sets.Rolls)
if spell.english == "Tactician's Roll" then
equip({body="Chasseur's Frac +1"})
elseif spell.english == "Caster's Roll" then
equip({legs="Chas. Culottes +1"})
elseif spell.english == "Courser's Roll" then
equip({feet="Chasseur's Bottes +1"})
end
elseif spell.type == "CorsairShot" then
equipSet = sets.QD
if ACC_Shots:contains(spell.english) then
equipSet = sets.QD.HighACC
else
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
if not ACC_Shots:contains(spell.english) and (world.day_element == spell.element or world.weather_element == spell.element) and sets.Obi[spell.element] and Obi == 'ON' then -- Use Obi Toggle To Unlock Elemental Obi --
equipSet = set_combine(equipSet,sets.Obi[spell.element])
end
end
equip(equipSet)
elseif spell.action_type == 'Magic' then
if string.find(spell.english,'Utsusemi') then
if buffactive['Copy Image (3)'] or buffactive['Copy Image (4)'] then
cancel_spell()
add_to_chat(123, spell.name .. ' Canceled: [3+ Images]')
return
else
equip(sets.Precast.FastCast)
end
else
equip(sets.Precast.FastCast)
end
elseif spell.type == "Waltz" then
refine_waltz(spell,action)
equip(sets.Waltz)
elseif spell.english == 'Spectral Jig' and buffactive.Sneak then
cast_delay(0.2)
send_command('cancel Sneak')
end
end
function midcast(spell,action)
if spell.action_type == 'Ranged Attack' then
equipSet = sets.Midshot
if equipSet[player.equipment.range] then
equipSet = equipSet[player.equipment.range]
end
if buffactive['Triple Shot'] then
equipSet = set_combine(equipSet,{body="Chasseur's Frac +1"})
end
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
equip(equipSet)
elseif spell.action_type == 'Magic' then
if spell.english == "Stoneskin" then
if buffactive.Stoneskin then
send_command('@wait 2.8;cancel stoneskin')
end
equip(sets.Midcast.Stoneskin)
elseif spell.english == "Sneak" then
if spell.target.name == player.name and buffactive['Sneak'] then
send_command('cancel sneak')
end
equip(sets.Midcast.Haste)
elseif string.find(spell.english,'Utsusemi') then
if spell.english == 'Utsusemi: Ichi' and (buffactive['Copy Image'] or buffactive['Copy Image (2)']) then
send_command('@wait 1.7;cancel Copy Image*')
end
equip(sets.Midcast.Haste)
elseif spell.english == 'Monomi: Ichi' then
if buffactive['Sneak'] then
send_command('@wait 1.7;cancel sneak')
end
equip(sets.Midcast.Haste)
else
equip(sets.Midcast.Haste)
end
end
end
function aftercast(spell,action)
if spell.action_type == 'Ranged Attack' and AutoMode == 'ON' then
autoRA()
else
status_change(player.status)
end
if not spell.interrupted then
if spell.type == "WeaponSkill" then
send_command('wait 0.2;gs c TP')
elseif spell.type == 'CorsairRoll' then
display_roll_info(spell)
elseif spell.english == 'Light Shot' then -- Sleep Countdown --
send_command('wait 50;input /echo '..spell.name..' Effect: [WEARING OFF IN 10 SEC.];wait 10;input /echo '..spell.name..' Effect: [OFF]')
end
end
end
function status_change(new,old)
if Armor == 'PDT' then
equip(sets.PDT)
elseif Armor == 'MDT' then
equip(sets.MDT)
elseif new == 'Engaged' then
equipSet = sets.Melee
if player.sub_job == 'DNC' or 'NIN' then
equipSet = sets.Melee.Dual
end
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
equip(equipSet)
elseif new == 'Idle' then
equip(sets.Idle[IdleArray[IdleIndex]])
elseif new == 'Resting' then
equip(sets.Resting)
end
end
function buff_change(buff,gain)
buff = string.lower(buff)
if buff == "aftermath: lv.3" then -- AM3 Timer/Countdown --
if gain then
send_command('timers create "Aftermath: Lv.3" 180 down;wait 120;input /echo Aftermath: Lv.3 [WEARING OFF IN 60 SEC.];wait 30;input /echo Aftermath: Lv.3 [WEARING OFF IN 30 SEC.];wait 20;input /echo Aftermath: Lv.3 [WEARING OFF IN 10 SEC.]')
else
send_command('timers delete "Aftermath: Lv.3"')
add_to_chat(123,'AM3: [OFF]')
end
elseif buff == 'weakness' then -- Weakness Timer --
if gain then
send_command('timers create "Weakness" 300 up')
else
send_command('timers delete "Weakness"')
end
end
if not midaction() then
status_change(player.status)
end
end
-- In Game: //gs c (command), Macro: /console gs c (command), Bind: gs c (command) --
function self_command(command)
if command == 'C1' then -- Accuracy Level Toggle --
AccIndex = (AccIndex % #AccArray) + 1
status_change(player.status)
add_to_chat(158,'Accuracy Level: ' .. AccArray[AccIndex])
elseif command == 'C5' then -- Auto Update Gear Toggle --
status_change(player.status)
add_to_chat(158,'Auto Update Gear')
elseif command == 'C3' then -- Obi Toggle --
if Obi == 'ON' then
Obi = 'OFF'
add_to_chat(123,'Obi: [OFF]')
else
Obi = 'ON'
add_to_chat(158,'Obi: [ON]')
end
status_change(player.status)
elseif command == 'C7' then -- PDT Toggle --
if Armor == 'PDT' then
Armor = 'None'
add_to_chat(123,'PDT Set: [Unlocked]')
else
Armor = 'PDT'
add_to_chat(158,'PDT Set: [Locked]')
end
status_change(player.status)
elseif command == 'C15' then -- MDT Toggle --
if Armor == 'MDT' then
Armor = 'None'
add_to_chat(123,'MDT Set: [Unlocked]')
else
Armor = 'MDT'
add_to_chat(158,'MDT Set: [Locked]')
end
status_change(player.status)
elseif command == 'C8' then -- Distance Toggle --
if player.target.distance then
target_distance = math.floor(player.target.distance*10)/10
add_to_chat(158,'Distance: '..target_distance)
else
add_to_chat(123,'No Target Selected')
end
elseif command == 'C6' then -- Idle Toggle --
IdleIndex = (IdleIndex % #IdleArray) + 1
status_change(player.status)
add_to_chat(158,'Idle Set: ' .. IdleArray[IdleIndex])
elseif command == 'C2' then -- Auto RA/WS Toggle. *Don't Rely On This. It Isn't As Fast As Shooting Manually. It Is Mainly For AFK or When You Dualbox* --
if AutoMode == 'ON' then
AutoMode = 'OFF'
add_to_chat(123,'Auto Mode: [OFF]')
else
AutoMode = 'ON'
add_to_chat(158,'Auto Mode: [ON]')
end
elseif command == 'TP' then
add_to_chat(158,'TP Return: ['..tostring(player.tp)..']')
elseif command:match('^SC%d$') then
send_command('//' .. sc_map[command])
end
end
function autoRA()
send_command('@wait 2.1; input /ra <t>')
end
function autoWS() -- Change Auto WS Here --
send_command('input /ws "Leaden Salute" <t>')
end
function define_roll_values()
rolls = {
CorsairsRoll = {lucky=5, unlucky=9, bonus="Experience Points"},
NinjaRoll = {lucky=4, unlucky=8, bonus="Evasion"},
HuntersRoll = {lucky=4, unlucky=8, bonus="Accuracy"},
ChaosRoll = {lucky=4, unlucky=8, bonus="Attack"},
MagussRoll = {lucky=2, unlucky=6, bonus="Magic Defense"},
HealersRoll = {lucky=3, unlucky=7, bonus="Cure Potency Received"},
PuppetRoll = {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
ChoralRoll = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
MonksRoll = {lucky=3, unlucky=7, bonus="Subtle Blow"},
BeastRoll = {lucky=4, unlucky=8, bonus="Pet Attack"},
SamuraiRoll = {lucky=2, unlucky=6, bonus="Store TP"},
EvokersRoll = {lucky=5, unlucky=9, bonus="Refresh"},
RoguesRoll = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
WarlocksRoll = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
FightersRoll = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
DrachenRoll = {lucky=4, unlucky=8, bonus="Pet Accuracy"},
GallantsRoll = {lucky=3, unlucky=7, bonus="Defense"},
WizardsRoll = {lucky=5, unlucky=9, bonus="Magic Attack"},
DancersRoll = {lucky=3, unlucky=7, bonus="Regen"},
ScholarsRoll = {lucky=2, unlucky=6, bonus="Conserve MP"},
BoltersRoll = {lucky=3, unlucky=9, bonus="Movement Speed"},
CastersRoll = {lucky=2, unlucky=7, bonus="Fast Cast"},
CoursersRoll = {lucky=3, unlucky=9, bonus="Snapshot"},
BlitzersRoll = {lucky=4, unlucky=9, bonus="Attack Delay"},
TacticiansRoll = {lucky=5, unlucky=8, bonus="Regain"},
AlliessRoll = {lucky=3, unlucky=10, bonus="Skillchain Damage"},
MisersRoll = {lucky=5, unlucky=7, bonus="Save TP"},
CompanionsRoll = {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
AvengersRoll = {lucky=4, unlucky=8, bonus="Counter Rate"},
NaturalistsRoll = {lucky=3, unlucky=7, bonus="Enhancing Magic Duration"},
RuneistsRoll = {lucky=4, unlucky=8, bonus="Magic Evasion"}
}
end
function display_roll_info(spell)
rollinfo = rolls[(string.gsub((string.gsub(spell.english, "%'+", "")), "%s+", ""))]
if rollinfo then
add_to_chat(158, spell.english..' = '..rollinfo.bonus..'. Lucky Roll is '..
tostring(rollinfo.lucky)..', Unlucky Roll is '..tostring(rollinfo.unlucky)..'.')
end
end
function refine_waltz(spell,action)
if spell.type ~= 'Waltz' then
return
end
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 spell.target.type == "SELF" then
targ = alliance[1][1]
missingHP = player.max_hp - player.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 targ then
if player.sub_job == 'DNC' then
if missingHP < 40 then
add_to_chat(123,'Full HP!')
cancel_spell()
return
elseif 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'] = 200,['Curing Waltz II'] = 350,['Curing Waltz III'] = 500,['Curing Waltz IV'] = 650,['Curing Waltz V'] = 800}
local tpCost = waltzTPCost[newWaltz]
local downgrade
if player.tp < tpCost and not buffactive.trance then
if player.tp < 200 then
add_to_chat(123, 'Insufficient TP ['..tostring(player.tp)..']. Cancelling.')
cancel_spell()
return
elseif player.tp < 350 then
newWaltz = 'Curing Waltz'
elseif player.tp < 500 then
newWaltz = 'Curing Waltz II'
elseif player.tp < 650 then
newWaltz = 'Curing Waltz III'
elseif player.tp < 800 then
newWaltz = 'Curing Waltz IV'
end
downgrade = 'Insufficient TP ['..tostring(player.tp)..']. Downgrading to '..newWaltz..'.'
end
if newWaltz ~= spell.english then
send_command('wait 0.03;input /ja "'..newWaltz..'" '..tostring(spell.target.raw))
if downgrade then
add_to_chat(8, downgrade)
end
cancel_spell()
return
end
if missingHP > 0 then
add_to_chat(8,'Trying to cure '..tostring(missingHP)..' HP using '..newWaltz..'.')
end
end
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
function actualCost(originalCost)
if buffactive["Penury"] then
return originalCost*.5
elseif buffactive["Light Arts"] then
return originalCost*.9
else
return originalCost
end
end
function degrade_spell(spell,degrade_array)
spell_index = table.find(degrade_array,spell.name)
if spell_index>1 then
new_spell = degrade_array[spell_index - 1]
change_spell(new_spell,spell.target.raw)
add_to_chat(8,spell.name..' Canceled: ['..player.mp..'/'..player.max_mp..'MP::'..player.mpp..'%] Casting '..new_spell..' instead.')
end
end
function change_spell(spell_name,target)
cancel_spell()
send_command('//'..spell_name..' '..target)
end
function sub_job_change(newSubjob, oldSubjob)
select_default_macro_book()
end
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
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'SAM' then
set_macro_page(1, 9)
elseif player.sub_job == 'WHM' then
set_macro_page(1, 9)
elseif player.sub_job == 'DNC' then
set_macro_page(1, 9)
elseif player.sub_job == 'NIN' then
set_macro_page(1, 9)
elseif player.sub_job == 'RDM' then
set_macro_page(1, 9)
elseif player.sub_job == 'WAR' then
set_macro_page(1, 9)
elseif player.sub_job == 'DRG' then
set_macro_page(1, 9)
else
set_macro_page(1, 9)
end
end
I assume that you are ranged attacking when the error occurs, and your ammo is located in wardrobe.
The logic assumes the ammo is in your inventory. You can tweak it a little so that will stop giving you an indexing error, but that particular condition will keep checking true if your ammo isn't in your inventory, and thus keep telling you you are low on ammo and cancel your action.
Either change lines 340-354 (there are other indexing holes), and move your ammo into inventory
Code
if spell.action_type == 'Ranged Attack' then
check_ammo = player.equipment.ammo
if player.equipment.ammo == 'empty' or not player.inventory[check_ammo] or player.inventory[check_ammo].count <= check_ammo_count then
add_to_chat(123, spell.name..' Canceled: [Out of Ammo]')
cancel_spell()
return
else
equip(sets.Preshot)
if player.inventory[check_ammo] and player.inventory[check_ammo].count <= ammo_warning_limit and player.inventory[check_ammo].count > 1 and not warning then
add_to_chat(8, '***** [Low Ammo Warning!] *****')
warning = true
elseif player.inventory[check_ammo] and player.inventory[check_ammo].count > ammo_warning_limit and warning then
warning = false
end
end
Or delete lines 341-346 and 348-354 (and the file will no longer warn you when low on ammo).
Hi, i got two different idle sets, my standard one with DT- and one with refresh stuff:
Code
sets.idle = ...
sets.idle.Refresh = ...
i'm using the function customize_idle_set to trigger latent refresh items:
Code
function customize_idle_set(idleSet)
if player.mpp < 51 then
idleSet = set_combine(idleSet, sets.latent_refresh)
end
this works only for the default idle set tho.
Does anyone know how to change this function, so the latent items only swap if i'm using sets.idle.refresh?
Thanks in advance.
He wants it only during refresh mode though. I think,
Code
function customize_idle_set(idleSet)
if state.IdleMode.value == "Refresh" and player.mpp < 51 then
idleSet = set_combine(idleSet, sets.latent_refresh)
end
return idleSet
end
Hello, recently after adding Trishula to my lua i noticed it not swapping back from Breath gear post WS quite frequently, so i set out to try to find a fix, i noticed Bokura had a more up to date file so I'm trying to use that. Now rather than make a new Trishula set this time i just added ACC toggle to base TP, but now this new file is having way more issues. I just stay in the set of whatever the last action was. It loaded without error right away but its completely unusable atm and i have no clue what I'm doing, any assistance is greatly appreciated.
Sometimes when switching jobs from say thf/dnc to pld/war it'll have my dual wield engaged set as default but if I //lua r gearswap after job change it'll be correct in going to normal engaged mode. Anyway to circumvent this?
Hello, recently after adding Trishula to my lua i noticed it not swapping back from Breath gear post WS quite frequently, so i set out to try to find a fix, i noticed Bokura had a more up to date file so I'm trying to use that. Now rather than make a new Trishula set this time i just added ACC toggle to base TP, but now this new file is having way more issues. I just stay in the set of whatever the last action was. It loaded without error right away but its completely unusable atm and i have no clue what I'm doing, any assistance is greatly appreciated.
-- *** Credit goes to Flippant & Martel for helping me with this Gearswap *** --
-- ** I Use Some of Motenten's Functions ** --
function get_sets()
AccIndex = 1
AccArray = {"LowACC","MidACC","HighACC"} -- 4 Levels Of Accuracy Sets For TP/WS/Hybrid/Jump. First Set Is LowACC. Add More ACC Sets If Needed Then Create Your New ACC Below. Most of These Sets Are Empty So You Need To Edit Them On Your Own. Remember To Check What The Combined Set Is For Each Sets. --
AttIndex = 1
AttArray = {"LowATT","HighATT","LowContent"} -- LowATT Is The Same As LowACC Set. MidACC, HighACC & MaxACC Take Priority Over These 2 Sets(HighATT & LowContent). --
IdleIndex = 1
IdleArray = {"Movement","Regen","Refresh"} -- Default Idle Set Is Movement --
Armor = 'None'
Twilight = 'None'
Rancor = 'OFF'-- Set Default Rancor ON or OFF Here --
Brais = 'OFF' -- Set Default High Jump Enmity Legs ON or OFF Here --
Samurai_Roll = 'ON' -- Set Default SAM Roll ON or OFF Here --
target_distance = 10 -- Set Default Distance Here --
-- Gavialis Helm --
elements = {}
elements.equip = {head="Gavialis Helm"}
elements.Stardiver = S{"Light","Dark","Earth"}
Cure_Spells = {"Cure","Cure II","Cure III","Cure IV"} -- Cure Degradation --
Curaga_Spells = {"Curaga","Curaga II"} -- Curaga Degradation --
Healer_Type_Wyvern = S{"WHM","RDM","BLM","BLU","SCH","GEO","SMN"} -- 50% Healing Breath Trigger SubJob --
Hybrid_Type_Wyvern = S{"PLD","DRK","BRD","NIN","RUN"} -- 33% Healing Breath Trigger SubJob --
sc_map = {SC1="Drakesbane", SC2="SpiritJump", SC3="SoulJump"} -- 3 Additional Binds. Can Change Whatever JA/WS/Spells You Like Here. Remember Not To Use Spaces. --
sets.Idle = {}
-- Idle/Town Sets --
sets.Idle.Regen = {
ammo="Staunch Tathlum",
head="Twilight Helm",
body="Kumarbi's Akar",
hands="Sulev. Gauntlets +1",
legs="Sulevi. Cuisses +1",
feet="Sulev. Leggings +1",
neck="Bathy Choker +1",
waist="Lycopodium Sash",
right_ear="Infused Earring",
left_ear="Anastasi Earring",
left_ring="Paguroidea Ring",
right_ring="Shneddick Ring",
back="Shadow Mantle",}
sets.Idle.Movement = set_combine(sets.Idle.Regen,{})
sets.Idle.Refresh = set_combine(sets.Idle.Regen,{
--head="Wivre Hairpin",
body="Ares' Cuirass +1",
hands="Ogier's Gauntlets",
feet="Ogier's Leggings"})
-- Twilight Set --
sets.Twilight = {head="Twilight Helm",body="Twilight Mail"}
-- TP Base Set --
sets.TP = {
ammo="Ginsen",
head={ name="Otomi Helm", augments={'Haste+2','"Snapshot"+2','STR+8',}},
body="Valorous Mail",
hands={ name="Acro Gauntlets", augments={'Accuracy+19 Attack+19','"Store TP"+6','DEX+10',}},
legs={ name="Taeon Tights", augments={'Accuracy+19 Attack+19','"Triple Atk."+2','DEX+8',}},
feet="Valorous Greaves",
neck="Ganesha's Mala",
waist="Windbuffet Belt +1",
left_ear="Brutal Earring",
right_ear="Tripudio Earring",
left_ring="Petrov Ring",
right_ring="Rajas Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},}
sets.TP.MidACC = set_combine(sets.TP,{
ammo="Ginsen",
head="Sulevia's Mask +1",
body={ name="Valorous Mail", augments={'Accuracy+24 Attack+24','"Dbl.Atk."+3','AGI+7','Accuracy+10',}},
hands={ name="Acro Gauntlets", augments={'Accuracy+19 Attack+19','"Store TP"+6','DEX+10',}},
legs={ name="Taeon Tights", augments={'Accuracy+19 Attack+19','"Triple Atk."+2','DEX+8',}},
feet={ name="Valorous Greaves", augments={'Accuracy+21 Attack+21','"Store TP"+7','Accuracy+11',}},
neck="Ganesha's Mala",
waist="Ioskeha Belt",
left_ear="Cessance Earring",
right_ear="Tripudio Earring",
left_ring="Petrov Ring",
right_ring="Rajas Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},
})
sets.TP.HighACC = set_combine(sets.TP.MidACC,{
ammo="Hasty Pinion +1",
head={ name="Valorous Mask", augments={'Accuracy+13 Attack+13','"Store TP"+6','DEX+5','Accuracy+12','Attack+12',}},
body="Valorous Mail",
hands="Sulev. Gauntlets +1",
legs="Sulevi. Cuisses +1",
feet={ name="Valorous Greaves", augments={'Accuracy+21 Attack+21','"Store TP"+7','Accuracy+11',}},
neck="Combatant's Torque",
waist="Ioskeha Belt",
left_ear="Zennaroi Earring",
right_ear="Digni. Earring",
left_ring="Ramuh Ring +1",
right_ring="Begrudging Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
-- Ryunohige(AM3 Down) TP Sets --
sets.TP.Ryunohige = {
ammo="Ginsen",
head={ name="Otomi Helm", augments={'Haste+2','"Snapshot"+2','STR+8',}},
body="Valorous Mail",
--body="Pelt. Plackart +1",
hands={ name="Acro Gauntlets", augments={'Accuracy+19 Attack+19','"Store TP"+6','DEX+10',}},
legs={ name="Taeon Tights", augments={'Accuracy+19 Attack+19','"Triple Atk."+2','DEX+8',}},
feet="Valorous Greaves",
neck="Ganesha's Mala",
waist="Windbuffet Belt +1",
left_ear="Brutal Earring",
right_ear="Tripudio Earring",
left_ring="Petrov Ring",
right_ring="Rajas Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},}
sets.TP.Ryunohige.MidACC = set_combine(sets.TP.Ryunohige,{
ammo="Ginsen",
head="Sulevia's Mask +1",
body={ name="Valorous Mail", augments={'Accuracy+24 Attack+24','"Dbl.Atk."+3','AGI+7','Accuracy+10',}},
hands={ name="Acro Gauntlets", augments={'Accuracy+19 Attack+19','"Store TP"+6','DEX+10',}},
legs={ name="Taeon Tights", augments={'Accuracy+19 Attack+19','"Triple Atk."+2','DEX+8',}},
feet={ name="Valorous Greaves", augments={'Accuracy+21 Attack+21','"Store TP"+7','Accuracy+11',}},
neck="Ganesha's Mala",
waist="Ioskeha Belt",
left_ear="Cessance Earring",
right_ear="Tripudio Earring",
left_ring="Petrov Ring",
right_ring="Rajas Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
sets.TP.Ryunohige.HighACC = set_combine(sets.TP.Ryunohige.MidACC,{
ammo="Hasty Pinion +1",
head={ name="Valorous Mask", augments={'Accuracy+13 Attack+13','"Store TP"+6','DEX+5','Accuracy+12','Attack+12',}},
body="Valorous Mail",
hands="Sulev. Gauntlets +1",
legs="Sulevi. Cuisses +1",
feet={ name="Valorous Greaves", augments={'Accuracy+21 Attack+21','"Store TP"+7','Accuracy+11',}},
neck="Combatant's Torque",
waist="Ioskeha Belt",
left_ear="Zennaroi Earring",
right_ear="Digni. Earring",
left_ring="Ramuh Ring +1",
right_ring="Begrudging Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
-- Ryunohige(AM3 Up) TP Sets --
sets.TP.Ryunohige.AM3 = set_combine(sets.TP.Ryunohige,{
ammo="Ginsen",
head={ name="Acro Helm", augments={'Accuracy+19 Attack+19','"Store TP"+6','STR+4 DEX+4',}},
body="Pelt. Plackart +1",
hands={ name="Acro Gauntlets", augments={'Accuracy+19 Attack+19','"Store TP"+6','DEX+10',}},
legs={ name="Acro Breeches", augments={'Accuracy+18 Attack+18','"Store TP"+6','STR+7',}},
feet="Valorous Greaves",
neck="Ganesha's Mala",
waist="Sweordfaetels +1",
right_ear="Tripudio Earring",
left_ear="Cessance Earring",
left_ring="Petrov Ring",
right_ring="Rajas Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
sets.TP.Ryunohige.MidACC.AM3 = set_combine(sets.TP.Ryunohige.AM3,{
ammo="Ginsen",
head={ name="Valorous Mask", augments={'Accuracy+13 Attack+13','"Store TP"+6','DEX+5','Accuracy+12','Attack+12',}},
body="Pelt. Plackart +1",
hands={ name="Acro Gauntlets", augments={'Accuracy+19 Attack+19','"Store TP"+6','DEX+10',}},
legs={ name="Acro Breeches", augments={'Accuracy+18 Attack+18','"Store TP"+6','STR+7',}},
feet={ name="Valorous Greaves", augments={'Accuracy+21 Attack+21','"Store TP"+7','Accuracy+11',}},
neck="Combatant's Torque",
waist="Ioskeha Belt",
right_ear="Tripudio Earring",
left_ear="Cessance Earring",
left_ring="Petrov Ring",
right_ring="Rajas Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
sets.TP.Ryunohige.HighACC.AM3 = set_combine(sets.TP.Ryunohige.MidACC.AM3,{
ammo="Hasty Pinion +1",
head={ name="Valorous Mask", augments={'Accuracy+13 Attack+13','"Store TP"+6','DEX+5','Accuracy+12','Attack+12',}},
body="Valorous Mail",
hands="Sulev. Gauntlets +1",
legs="Sulevi. Cuisses +1",
feet={ name="Valorous Greaves", augments={'Accuracy+21 Attack+21','"Store TP"+7','Accuracy+11',}},
neck="Combatant's Torque",
waist="Ioskeha Belt",
left_ear="Zennaroi Earring",
right_ear="Digni. Earring",
left_ring="Ramuh Ring +1",
right_ring="Begrudging Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
-- Ryunohige(AM3 Down: Ionis) TP Sets --
sets.TP.Ryunohige.Ionis = set_combine(sets.TP.Ryunohige,{})
sets.TP.Ryunohige.MidACC.Ionis = set_combine(sets.TP.Ryunohige.MidACC,{})
sets.TP.Ryunohige.HighACC.Ionis = set_combine(sets.TP.Ryunohige.HighACC,{})
-- Ryunohige(AM3 Up: Ionis) TP Sets --
sets.TP.Ryunohige.AM3.Ionis = set_combine(sets.TP.Ryunohige.AM3,{})
sets.TP.Ryunohige.MidACC.AM3.Ionis = set_combine(sets.TP.Ryunohige.MidACC.AM3,{})
sets.TP.Ryunohige.HighACC.AM3.Ionis = set_combine(sets.TP.Ryunohige.HighACC.AM3,{})
-- Ryunohige(AM3 Down: SAM Roll) TP Sets --
sets.TP.Ryunohige.STP = set_combine(sets.TP.Ryunohige,{})
sets.TP.Ryunohige.MidACC.STP = set_combine(sets.TP.Ryunohige.MidACC,{})
sets.TP.Ryunohige.HighACC.STP = set_combine(sets.TP.Ryunohige.HighACC,{})
-- Ryunohige(AM3 Up: SAM Roll) TP Sets --
sets.TP.Ryunohige.AM3.STP = set_combine(sets.TP.Ryunohige.AM3,{})
sets.TP.Ryunohige.MidACC.AM3.STP = set_combine(sets.TP.Ryunohige.MidACC.AM3,{})
sets.TP.Ryunohige.HighACC.AM3.STP = set_combine(sets.TP.Ryunohige.HighACC.AM3,{})
-- Ryunohige(AM3 Down: Ionis + SAM Roll) TP Sets --
sets.TP.Ryunohige.Ionis.STP = set_combine(sets.TP.Ryunohige,{})
sets.TP.Ryunohige.MidACC.Ionis.STP = set_combine(sets.TP.Ryunohige.MidACC,{})
sets.TP.Ryunohige.HighACC.Ionis.STP = set_combine(sets.TP.Ryunohige.HighACC,{})
-- Ryunohige(AM3 Up: Ionis + SAM Roll) TP Sets --
sets.TP.Ryunohige.AM3.Ionis.STP = set_combine(sets.TP.Ryunohige.AM3,{})
sets.TP.Ryunohige.MidACC.AM3.Ionis.STP = set_combine(sets.TP.Ryunohige.MidACC.AM3,{})
sets.TP.Ryunohige.HighACC.AM3.Ionis.STP = set_combine(sets.TP.Ryunohige.HighACC.AM3,{})
-- Gungnir TP Sets --
sets.TP.Gungnir = {}
sets.TP.Gungnir.MidACC = set_combine(sets.TP.Gungnir,{})
sets.TP.Gungnir.HighACC = set_combine(sets.TP.Gungnir.MidACC,{})
-- Gungnir(Ionis) TP Sets --
sets.TP.Gungnir.Ionis = set_combine(sets.TP.Gungnir,{})
sets.TP.Gungnir.MidACC.Ionis = set_combine(sets.TP.Gungnir.MidACC,{})
sets.TP.Gungnir.HighACC.Ionis = set_combine(sets.TP.Gungnir.HighACC,{})
-- Gungnir(SAM Roll) TP Sets --
sets.TP.Gungnir.STP = set_combine(sets.TP.Gungnir,{})
sets.TP.Gungnir.MidACC.STP = set_combine(sets.TP.Gungnir.MidACC,{})
sets.TP.Gungnir.HighACC.STP = set_combine(sets.TP.Gungnir.HighACC,{})
-- Gungnir(Ionis + SAM Roll) TP Sets --
sets.TP.Gungnir.Ionis.STP = set_combine(sets.TP.Gungnir,{})
sets.TP.Gungnir.MidACC.Ionis.STP = set_combine(sets.TP.Gungnir.MidACC,{})
sets.TP.Gungnir.HighACC.Ionis.STP = set_combine(sets.TP.Gungnir.HighACC,{})
-- Rhongomiant TP Sets --
sets.TP.Rhongomiant = {}
sets.TP.Rhongomiant.MidACC = set_combine(sets.TP.Rhongomiant,{})
sets.TP.Rhongomiant.HighACC = set_combine(sets.TP.Rhongomiant.MidACC,{})
-- Rhongomiant(Ionis) TP Sets --
sets.TP.Rhongomiant.Ionis = set_combine(sets.TP.Rhongomiant,{})
sets.TP.Rhongomiant.MidACC.Ionis = set_combine(sets.TP.Rhongomiant.MidACC,{})
sets.TP.Rhongomiant.HighACC.Ionis = set_combine(sets.TP.Rhongomiant.HighACC,{})
-- Rhongomiant(SAM Roll) TP Sets --
sets.TP.Rhongomiant.STP = set_combine(sets.TP.Rhongomiant,{})
sets.TP.Rhongomiant.MidACC.STP = set_combine(sets.TP.Rhongomiant.MidACC,{})
sets.TP.Rhongomiant.HighACC.STP = set_combine(sets.TP.Rhongomiant.HighACC,{})
-- Rhongomiant(Ionis + SAM Roll) TP Sets --
sets.TP.Rhongomiant.Ionis.STP = set_combine(sets.TP.Rhongomiant,{})
sets.TP.Rhongomiant.MidACC.Ionis.STP = set_combine(sets.TP.Rhongomiant.MidACC,{})
sets.TP.Rhongomiant.HighACC.Ionis.STP = set_combine(sets.TP.Rhongomiant.HighACC,{})
-- Upukirex TP Sets --
sets.TP.Upukirex = {}
sets.TP.Upukirex.MidACC = set_combine(sets.TP.Upukirex,{})
sets.TP.Upukirex.HighACC = set_combine(sets.TP.Upukirex.MidACC,{})
-- Upukirex(Ionis) TP Sets --
sets.TP.Upukirex.Ionis = set_combine(sets.TP.Upukirex,{})
sets.TP.Upukirex.MidACC.Ionis = set_combine(sets.TP.Upukirex.MidACC,{})
sets.TP.Upukirex.HighACC.Ionis = set_combine(sets.TP.Upukirex.HighACC,{})
-- Upukirex(SAM Roll) TP Sets --
sets.TP.Upukirex.STP = set_combine(sets.TP.Upukirex,{})
sets.TP.Upukirex.MidACC.STP = set_combine(sets.TP.Upukirex.MidACC,{})
sets.TP.Upukirex.HighACC.STP = set_combine(sets.TP.Upukirex.HighACC,{})
-- Upukirex(Ionis + SAM Roll) TP Sets --
sets.TP.Upukirex.Ionis.STP = set_combine(sets.TP.Upukirex,{})
sets.TP.Upukirex.MidACC.Ionis.STP = set_combine(sets.TP.Upukirex.MidACC,{})
sets.TP.Upukirex.HighACC.Ionis.STP = set_combine(sets.TP.Upukirex.HighACC,{})
-- AM3 Rancor ON Mantle --
sets.TP.Rancor = {back="Rancorous Mantle"}
-- PDT/MDT Sets --
sets.PDT = {
ammo="Staunch Tathlum",
head="Sulevia's Mask +1",
body="Sulevia's Plate. +1",
hands="Sulev. Gauntlets +1",
legs="Sulevi. Cuisses +1",
feet="Sulev. Leggings +1",
neck="Twilight Torque",
waist="Flume Belt",
left_ear="Genmei Earring",
right_ear="Etiolation Earring",
left_ring="Defending Ring",
right_ring="Shneddick Ring",
back="Shadow Mantle",}
sets.MDT = set_combine(sets.PDT,{
ammo="Staunch Tathlum",
waist="Nierenschutz",
left_ear="Sanare Earring",
right_ear="Etiolation Earring",
right_ring="Shadow Ring",
back="Engulfer Cape +1",})
-- Hybrid Sets --
sets.TP.Hybrid = set_combine(sets.PDT,{
ammo="Hasty Pinion +1",
head="Sulevia's Mask +1",
body="Sulevia's Plate. +1",
hands="Sulev. Gauntlets +1",
legs="Sulevi. Cuisses +1",
feet="Sulev. Leggings +1",
neck="Twilight Torque",
waist="Tempus Fugit",
left_ear="Genmei Earring",
right_ear="Digni. Earring",
left_ring="Defending Ring",
right_ring="Patricius Ring",
back="Agema Cape",})
sets.TP.Hybrid.MidACC = set_combine(sets.TP.Hybrid,{})
sets.TP.Hybrid.HighACC = set_combine(sets.TP.Hybrid.MidACC,{})
-- WS Base Set --
sets.WS = {
ammo="Floestone",
head={ name="Valorous Mask", augments={'Accuracy+21 Attack+21','Sklchn.dmg.+2%','STR+14','Attack+9',}},
body="Sulevia's Plate. +1",
hands="Sulev. Gauntlets +1",
legs="Sulevi. Cuisses +1",
feet="Sulev. Leggings +1",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Brutal Earring",
right_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +25',}},
left_ring="Ifrit Ring +1",
right_ring="Ifrit Ring +1",
back={ name="Brigantia's Mantle", augments={'STR+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}},}
-- Drakesbane Sets --
sets.WS.Drakesbane = {
ammo="Floestone",
head={ name="Valorous Mask", augments={'Accuracy+21 Attack+21','Sklchn.dmg.+2%','STR+14','Attack+9',}},
body="Sulevia's Plate. +1",
hands="Sulev. Gauntlets +1",
legs="Pelt. Cuissots +1",
feet="Sulev. Leggings +1",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Brutal Earring",
right_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +25',}},
left_ring="Ifrit Ring +1",
right_ring="Begrudging Ring",
back={ name="Brigantia's Mantle", augments={'STR+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},}
sets.WS.Drakesbane.MidACC = set_combine(sets.WS.Drakesbane,{
})
sets.WS.Drakesbane.HighACC = set_combine(sets.WS.Drakesbane.MidACC,{
ammo="Hasty Pinion +1",
head="Ynglinga Sallet",
body="Valorous Mail",
hands="Sulev. Gauntlets +1",
legs="Sulevi. Cuisses +1",
feet={ name="Valorous Greaves", augments={'Accuracy+21 Attack+21','"Store TP"+7','Accuracy+11',}},
neck="Combatant's Torque",
waist="Olseni Belt",
right_ear="Zwazo Earring +1",
left_ear="Zennaroi Earring",
left_ring="Ramuh Ring +1",
right_ring="Begrudging Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
-- Drakesbane(Low Level Content) Set --
sets.WS.Drakesbane.LowContent = set_combine(sets.WS.Drakesbane,{})
-- Drakesbane(High Attack) Set --
sets.WS.Drakesbane.HighATT = set_combine(sets.WS.Drakesbane,{})
-- Stardiver Sets --
sets.WS.Stardiver = {
ammo="Floestone",
head={ name="Valorous Mask", augments={'Accuracy+21 Attack+21','Sklchn.dmg.+2%','STR+14','Attack+9',}},
body="Sulevia's Plate. +1",
hands="Sulev. Gauntlets +1",
legs="Valorous Hose",
feet="Sulev. Leggings +1",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Brutal Earring",
right_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +25',}},
left_ring="Ifrit Ring +1",
right_ring="Ifrit Ring +1",
back={ name="Brigantia's Mantle", augments={'STR+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},}
sets.WS.Stardiver.MidACC = set_combine(sets.WS.Stardiver,{
--legs="Sulevi. Cuisses +1",
})
sets.WS.Stardiver.HighACC = set_combine(sets.WS.Stardiver.MidACC,{
ammo="Hasty Pinion +1",
head="Ynglinga Sallet",
body="Valorous Mail",
hands="Sulev. Gauntlets +1",
legs="Sulevi. Cuisses +1",
feet={ name="Valorous Greaves", augments={'Accuracy+21 Attack+21','"Store TP"+7','Accuracy+11',}},
neck="Combatant's Torque",
waist="Olseni Belt",
right_ear="Zwazo Earring +1",
left_ear="Zennaroi Earring",
left_ring="Ramuh Ring +1",
right_ring="Begrudging Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
-- Geirskogul Set --
sets.WS.Geirskogul = {}
-- Camlann's Torment Set --
sets.WS["Camlann's Torment"] = {
ammo="Floestone",
head={ name="Valorous Mask", augments={'Accuracy+21 Attack+21','Sklchn.dmg.+2%','STR+14','Attack+9',}},
body="Sulevia's Plate. +1",
hands={ name="Despair Fin. Gaunt.", augments={'STR+12','VIT+7','Haste+2%',}},
legs="Sulevi. Cuisses +1",
feet="Sulev. Leggings +1",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Ishvara Earring",
right_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +25',}},
left_ring="Ifrit Ring +1",
right_ring="Ifrit Ring +1",
back={ name="Brigantia's Mantle", augments={'STR+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}},}
sets.WS["Camlann's Torment"].MidACC = set_combine(sets.WS["Camlann's Torment"],{
})
sets.WS["Camlann's Torment"].HighACC = set_combine(sets.WS["Camlann's Torment"].MidACC,{
ammo="Hasty Pinion +1",
head="Ynglinga Sallet",
body="Valorous Mail",
hands="Sulev. Gauntlets +1",
legs="Sulevi. Cuisses +1",
feet={ name="Valorous Greaves", augments={'Accuracy+21 Attack+21','"Store TP"+7','Accuracy+11',}},
neck="Combatant's Torque",
waist="Olseni Belt",
left_ear="Zennaroi Earring",
right_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +25',}},
left_ring="Ramuh Ring +1",
right_ring="Begrudging Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
--Sonic Thrust Sets--
sets.WS["Sonic Thrust"] = {
ammo="Floestone",
head={ name="Valorous Mask", augments={'Accuracy+21 Attack+21','Sklchn.dmg.+2%','STR+14','Attack+9',}},
body="Sulevia's Plate. +1",
hands={ name="Despair Fin. Gaunt.", augments={'STR+12','VIT+7','Haste+2%',}},
legs="Sulevi. Cuisses +1",
feet="Sulev. Leggings +1",
neck="Fotia Gorget",
waist="Fotia Belt",
left_ear="Ishvara Earring",
right_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +25',}},
left_ring="Ifrit Ring +1",
right_ring="Ifrit Ring +1",
back={ name="Brigantia's Mantle", augments={'STR+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}},}
sets.WS["Sonic Thrust"].MidACC = set_combine(sets.WS["Sonic Thrust"],{
})
sets.WS["Sonic Thrust"].HighACC = set_combine(sets.WS["Sonic Thrust"].MidACC,{
ammo="Hasty Pinion +1",
head="Ynglinga Sallet",
body="Valorous Mail",
hands="Sulev. Gauntlets +1",
legs="Sulevi. Cuisses +1",
feet={ name="Valorous Greaves", augments={'Accuracy+21 Attack+21','"Store TP"+7','Accuracy+11',}},
neck="Combatant's Torque",
waist="Olseni Belt",
left_ear="Zennaroi Earring",
right_ear={ name="Moonshade Earring", augments={'Attack+4','TP Bonus +25',}},
left_ring="Ramuh Ring +1",
right_ring="Begrudging Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
sets.JA = {}
-- Jump Sets --
sets.JA.Jump = {
ammo="Ginsen",
head="Sulevia's Mask +1",
body="Vishap Mail +1",
hands="Vishap F. G. +1",
legs="Pelt. Cuissots +1",
feet="Vishap Greaves +1",
neck="Ganesha's Mala",
waist="Sweordfaetels +1",
left_ear="Cessance Earring",
right_ear="Tripudio Earring",
left_ring="Petrov Ring",
right_ring="Rajas Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},}
sets.JA.Jump.MidACC = set_combine(sets.JA.Jump,{
head="Sulevia's Mask +1",
neck="Combatant's Torque",
waist="Kentarch Belt +1",})
sets.JA.Jump.HighACC = set_combine(sets.JA.Jump.MidACC,{
ammo="Hasty Pinion +1",
head={ name="Valorous Mask", augments={'Accuracy+13 Attack+13','"Store TP"+6','DEX+5','Accuracy+12','Attack+12',}},
body="Valorous Mail",
hands="Sulev. Gauntlets +1",
legs="Sulevi. Cuisses +1",
feet={ name="Valorous Greaves", augments={'Accuracy+21 Attack+21','"Store TP"+7','Accuracy+11',}},
neck="Combatant's Torque",
waist="Kentarch Belt +1",
left_ear="Zennaroi Earring",
right_ear="Digni. Earring",
left_ring="Ramuh Ring +1",
right_ring="Begrudging Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
-- High Jump Sets --
sets.JA["High Jump"] = set_combine(sets.JA.Jump,{
feet="Valorous Greaves",})
sets.JA["High Jump"].MidACC = set_combine(sets.JA.Jump.MidACC,{
feet="Valorous Greaves",})
sets.JA["High Jump"].HighACC = set_combine(sets.JA.Jump.HighACC,{})
-- Spirit Jump Sets --
sets.JA["Spirit Jump"] = set_combine(sets.JA.Jump,{
ammo="Ginsen",
head="Sulevia's Mask +1",
body="Pelt. Plackart +1",
hands={ name="Acro Gauntlets", augments={'Accuracy+19 Attack+19','"Store TP"+6','DEX+10',}},
legs="Pelt. Cuissots +1",
feet="Peltast's Schynbalds +1",
neck="Ganesha's Mala",
waist="Sweordfaetels +1",
left_ear="Cessance Earring",
right_ear="Tripudio Earring",
left_ring="Petrov Ring",
right_ring="Rajas Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
sets.JA["Spirit Jump"].MidACC = set_combine(sets.JA["Spirit Jump"],{
head="Sulevia's Mask +1",
neck="Combatant's Torque",
waist="Kentarch Belt +1",})
sets.JA["Spirit Jump"].HighACC = set_combine(sets.JA["Spirit Jump"].MidACC,{
ammo="Hasty Pinion +1",
head={ name="Valorous Mask", augments={'Accuracy+13 Attack+13','"Store TP"+6','DEX+5','Accuracy+12','Attack+12',}},
body="Valorous Mail",
hands="Sulev. Gauntlets +1",
legs="Sulevi. Cuisses +1",
feet={ name="Valorous Greaves", augments={'Accuracy+21 Attack+21','"Store TP"+7','Accuracy+11',}},
neck="Combatant's Torque",
waist="Kentarch Belt +1",
left_ear="Zennaroi Earring",
right_ear="Digni. Earring",
left_ring="Ramuh Ring +1",
right_ring="Begrudging Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
-- Soul Jump Sets --
sets.JA["Soul Jump"] = set_combine(sets.JA.Jump,{
ammo="Ginsen",
head="Sulevia's Mask +1",
body="Pelt. Plackart +1",
hands={ name="Acro Gauntlets", augments={'Accuracy+19 Attack+19','"Store TP"+6','DEX+10',}},
legs="Pelt. Cuissots +1",
feet="Valorous Greaves",
neck="Ganesha's Mala",
waist="Sweordfaetels +1",
left_ear="Cessance Earring",
right_ear="Tripudio Earring",
left_ring="Petrov Ring",
right_ring="Rajas Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
sets.JA["Soul Jump"].MidACC = set_combine(sets.JA.Jump.MidACC,{
ammo="Ginsen",
head="Sulevia's Mask +1",
body="Pelt. Plackart +1",
hands={ name="Acro Gauntlets", augments={'Accuracy+19 Attack+19','"Store TP"+6','DEX+10',}},
legs="Pelt. Cuissots +1",
feet="Valorous Greaves",
neck="Combatant's Torque",
waist="Kentarch Belt +1",
left_ear="Cessance Earring",
right_ear="Tripudio Earring",
left_ring="Petrov Ring",
right_ring="Rajas Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
sets.JA["Soul Jump"].HighACC = set_combine(sets.JA.Jump.HighACC,{
ammo="Hasty Pinion +1",
head={ name="Valorous Mask", augments={'Accuracy+13 Attack+13','"Store TP"+6','DEX+5','Accuracy+12','Attack+12',}},
body="Valorous Mail",
hands="Sulev. Gauntlets +1",
legs="Sulevi. Cuisses +1",
feet={ name="Valorous Greaves", augments={'Accuracy+21 Attack+21','"Store TP"+7','Accuracy+11',}},
neck="Combatant's Torque",
waist="Kentarch Belt +1",
left_ear="Zennaroi Earring",
right_ear="Digni. Earring",
left_ring="Ramuh Ring +1",
right_ring="Begrudging Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},})
-- Angon Set --
sets.JA.Angon = {ammo="Angon",ear1="Dragoon's Earring",hands="Pteroslaver Finger Gauntlets"}
sets.JA["Ancient Circle"] = {"Vishap Brais +1"}
sets.JA['Call Wyvern'] = {body="Pteroslaver Mail"}
sets.JA['Spirit Surge'] = {body="Pteroslaver Mail"}
sets.Pet = {}
-- Wyvern +HP Set --
sets.Pet.WyvernHP = {
head={ name="Ptero. Armet +1", augments={'Enhances "Deep Breathing" effect',}},
body={ name="Acro Surcoat", augments={'Pet: Mag. Acc.+25','Pet: Breath+8',}},
hands={ name="Acro Gauntlets", augments={'Pet: Mag. Acc.+17','Pet: Breath+8',}},
legs={ name="Acro Breeches", augments={'Pet: Mag. Acc.+18','Pet: Breath+8',}},
feet={ name="Acro Leggings", augments={'Pet: Mag. Acc.+25','Pet: Breath+8',}},
neck="Lancer's Torque",
waist="Glassblower's Belt",
left_ear="Anastasi Earring",
right_ear="Lancer's Earring",
left_ring="Defending Ring",
right_ring="Patricius Ring",
back={ name="Brigantia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Store TP"+10',}},}
sets.JA["Spirit Link"] = set_combine(sets.Pet.WyvernHP,{head="Vishap Armet +1",hands="Peltast's Vambraces +1", feet="Pteroslaver Greaves +1", right_ear="Pratik Earring",})
sets.Pet["Restoring Breath"] = set_combine(sets.Pet.WyvernHP)
sets.Pet["Smiting Breath"] = set_combine(sets.Pet.WyvernHP)
sets.Pet["Steady Wing"] = {
body={ name="Emicho Haubert", augments={'Pet: HP+100','Pet: INT+15','Pet: "Regen"+2',}},
neck="Chanoix's Gorget",
hands={ name="Despair Fin. Gaunt.", augments={'STR+12','VIT+7','Haste+2%',}},
legs="Vishap Brais +1",
feet={ name="Ptero. Greaves +1", augments={'Enhances "Empathy" effect',}},
left_ear="Anastasi Earring",
right_ear="Lancer's Earring",
back={ name="Updraft Mantle", augments={'STR+3','Pet: Breath+10','Pet: Damage taken -4%',}},}
-- Healing Breath Trigger: +HP Gear --
sets.HealingBreathTrigger = set_combine(sets.Pet.WyvernHP,{
head="Vishap Armet +1",
body="Sulevia's Plate. +1",
hands={ name="Despair Fin. Gaunt.", augments={'STR+12','VIT+7','Haste+2%',}},
legs="Pelt. Cuissots +1",
feet={ name="Ptero. Greaves +1", augments={'Enhances "Empathy" effect',}},
back="Reiki Cloak",})
-- Healing Breath Set --
sets.Healing_Breath = set_combine(sets.Pet.WyvernHP,{})
-- Elemental Breath Set
sets.Elemental_Breath = set_combine(sets.Pet.WyvernHP)
-- Waltz Set --
sets.Waltz = {}
sets.Precast = {}
-- Fastcast Set --
sets.Precast.FastCast = {
ammo="Impatiens",
head={ name="Cizin Helm +1", augments={'Phys. dmg. taken -3%','Accuracy+4',}},
hands="Leyline Gloves",
legs="Enif Cosciales",
neck="Orunmila's Torque",
left_ear="Loquac. Earring",
right_ear="Etiolation Earring",
left_ring="Veneficium Ring",
right_ring="Prolix Ring",}
sets.Midcast = {}
-- Magic Haste Set --
sets.Midcast.Haste = set_combine(sets.PDT,{
ammo="Impatiens",
head={ name="Cizin Helm +1", augments={'Phys. dmg. taken -3%','Accuracy+4',}},
hands="Leyline Gloves",
legs="Enif Cosciales",
neck="Orunmila's Torque",
waist="Tempus Fugit",
left_ear="Loquac. Earring",
right_ear="Etiolation Earring",
left_ring="Defending Ring",
right_ring="Prolix Ring",
back="Shadow Mantle",})
-- Stoneskin Set --
sets.Midcast.Stoneskin = {
ammo="Impatiens",
head={ name="Cizin Helm +1", augments={'Phys. dmg. taken -3%','Accuracy+4',}},
hands="Stone Mufflers",
legs="Enif Cosciales",
neck="Stone Gorget",
waist="Tempus Fugit",
left_ear="Loquac. Earring",
right_ear="Earthcry Earring",
left_ring="Defending Ring",
right_ring="Prolix Ring",
back="Shadow Mantle",}
-- Cure Set --
sets.Midcast.Cure = {
ammo="Impatiens",
head={ name="Cizin Helm +1", augments={'Phys. dmg. taken -3%','Accuracy+4',}},
hands="Leyline Gloves",
legs="Enif Cosciales",
neck="Orunmila's Torque",
waist="Tempus Fugit",
left_ear="Mendicant's Earring",
right_ear="Roundel Earring",
left_ring="Defending Ring",
right_ring="Prolix Ring",
back="Shadow Mantle",}
end
function pretarget(spell,action)
if midaction() or pet_midaction() then
cancel_spell()
return
elseif spell.action_type == 'Magic' and buffactive.silence then -- Auto Use Echo Drops If You Are Silenced --
cancel_spell()
send_command('input /item "Echo Drops" <me>')
elseif spell.english == "Spirit Jump" and not pet.isvalid then -- Change Spirit Jump To Jump If Wyvern Is Not Present --
cancel_spell()
send_command('Jump')
elseif spell.english == "Soul Jump" and not pet.isvalid then -- Change Soul Jump To High Jump If Wyvern Is Not Present --
cancel_spell()
send_command('HighJump')
elseif spell.english == "Dismiss" and pet.hpp < 100 then -- Cancel Dismiss If Wyvern's HP Is Under 100% --
cancel_spell()
add_to_chat(123, spell.english .. ' Canceled: [' .. pet.hpp .. ']')
return
elseif spell.english == "Call Wyvern" and pet.isvalid then -- Change Call Wyvern To Dismiss If Wyvern Is Present --
cancel_spell()
send_command('Dismiss')
elseif spell.type == "WeaponSkill" and spell.target.distance > target_distance and player.status == 'Engaged' then -- Cancel WS If You Are Out Of Range --
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Out of Range]')
return
elseif spell.english:ifind("Cure") and player.mp<actualCost(spell.mp_cost) then
degrade_spell(spell,Cure_Spells)
elseif spell.english:ifind("Curaga") and player.mp<actualCost(spell.mp_cost) then
degrade_spell(spell,Curaga_Spells)
end
end
function precast(spell,action)
if midaction() or pet_midaction() then
cancel_spell()
return
elseif spell.action_type == 'Ranged Attack' then
equip({ammo="Pebble"})
elseif spell.type == "WeaponSkill" then
if player.status ~= 'Engaged' then -- Cancel WS If You Are Not Engaged. Can Delete It If You Don't Need It --
cancel_spell()
add_to_chat(123,'Unable To Use WeaponSkill: [Disengaged]')
return
else
equipSet = sets.WS
if equipSet[spell.english] then
equipSet = equipSet[spell.english]
end
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
if equipSet[AttArray[AttIndex]] then
equipSet = equipSet[AttArray[AttIndex]]
end
if elements[spell.name] and elements[spell.name]:contains(world.day_element) then
equipSet = set_combine(equipSet,elements.equip)
end
if player.tp > 2990 or buffactive.Sekkanoki then -- Equip Kokou's Earring When You Have 3000 TP or Sekkanoki --
equipSet = set_combine(equipSet,{ear2="Kokou's Earring"})
end
if buffactive['Reive Mark'] then -- Equip Ygnas's Resolve +1 During Reive --
equipSet = set_combine(equipSet,{neck="Ygnas's Resolve +1"})
end
equip(equipSet)
end
elseif spell.type == "JobAbility" then
equipSet = sets.JA
if equipSet[spell.english] then
equipSet = equipSet[spell.english]
end
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
if spell.english == "High Jump" and Brais == 'ON' then -- Use High Jump Enmity Toggle To Equip Vishap Brais +1 For High Jump --
equipSet = set_combine(equipSet,{legs="Vishap Brais +1"})
end
equip(equipSet)
elseif spell.action_type == 'Magic' then
if buffactive.silence or spell.target.distance > 16+target_distance then
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Silenced or Out of Casting Range]')
return
else
if spell.english == 'Utsusemi: Ni' then
if buffactive['Copy Image (3)'] then
cancel_spell()
add_to_chat(123, spell.name .. ' Canceled: [3 Images]')
return
else
equip(sets.Precast.FastCast)
end
else
equip(sets.Precast.FastCast)
end
end
elseif spell.type == "Waltz" then
refine_waltz(spell,action)
equip(sets.Waltz)
elseif spell.english == 'Spectral Jig' and buffactive.Sneak then
cast_delay(0.2)
send_command('cancel Sneak')
elseif spell.type == "PetCommand" then
equip(sets.Pet[spell.english])
end
if Twilight == 'Twilight' then
equip(sets.Twilight)
end
end
function midcast(spell,action)
if pet_midaction() then
return
elseif spell.action_type == 'Ranged Attack' then
equip({ammo="Pebble"})
elseif spell.action_type == 'Magic' then
if (spell.english:startswith('Cur') or spell.english == "Wild Carrot" or spell.english == "Healing Breeze") and spell.english ~= "Cursna" then
equip(sets.Midcast.Cure)
elseif spell.english == "Stoneskin" then
if buffactive.Stoneskin then
send_command('@wait 2.8;cancel stoneskin')
end
equip(sets.Midcast.Stoneskin)
elseif spell.english:startswith('Protect') or spell.english:startswith('Shell') then
if spell.target.name == player.name then
equipSet = set_combine(equipSet,{ring2="Sheltered Ring"})
end
elseif spell.english == "Sneak" then
if spell.target.name == player.name and buffactive['Sneak'] then
send_command('cancel sneak')
end
equip(sets.Midcast.Haste)
elseif spell.english:startswith('Utsusemi') then
if spell.english == 'Utsusemi: Ichi' and (buffactive['Copy Image'] or buffactive['Copy Image (2)'] or buffactive['Copy Image (3)']) then
send_command('@wait 1.7;cancel Copy Image*')
end
equip(sets.Midcast.Haste)
elseif spell.english == 'Monomi: Ichi' then
if buffactive['Sneak'] then
send_command('@wait 1.7;cancel sneak')
end
equip(sets.Midcast.Haste)
elseif Healer_Type_Wyvern:contains(player.sub_job) and player.hpp < 51 and pet.isvalid then
equip(sets.Healing_Breath_Trigger)
elseif Hybrid_Type_Wyvern:contains(player.sub_job) and player.hpp < 34 and pet.isvalid then
equip(sets.Healing_Breath_Trigger)
else
equip(sets.Midcast.Haste)
end
end
end
function aftercast(spell,action)
if pet_midaction() then
return
elseif not spell.interrupted then
if spell.type == "WeaponSkill" then
send_command('wait 0.2;gs c TP')
elseif spell.english == "Angon" then -- Angon Timer/Countdown --
timer_angon()
send_command('wait 80;input /echo '..spell.name..': [WEARING OFF IN 10 SEC.];wait 10;timers delete "Angon";input /echo '..spell.name..': [OFF]')
elseif spell.english == "Ancient Circle" then -- Ancient Circle Countdown --
send_command('wait 260;input /echo '..spell.name..': [WEARING OFF IN 10 SEC.];wait 10;input /echo '..spell.name..': [OFF]')
end
elseif not spell.type == "PetCommand" then
status_change(player.status)
end
end
function status_change(new,old)
check_equip_lock()
if Armor == 'PDT' then
equip(sets.PDT)
elseif Armor == 'MDT' then
equip(sets.MDT)
elseif new == 'Engaged' then
equipSet = sets.TP
if Armor == 'Hybrid' and equipSet["Hybrid"] then
equipSet = equipSet["Hybrid"]
end
if equipSet[player.equipment.main] then
equipSet = equipSet[player.equipment.main]
end
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
if buffactive["Aftermath: Lv.3"] and equipSet["AM3"] then
if Rancor == 'ON' then -- Default Rancor Toggle Is Rancorous Mantle --
equipSet = set_combine(equipSet["AM3"],sets.TP.Rancor)
else -- Use Rancor Toggle For Atheling Mantle --
equipSet = equipSet["AM3"]
end
end
if buffactive.Ionis and equipSet["Ionis"] then
equipSet = equipSet["Ionis"]
end
if buffactive["Samurai Roll"] and equipSet["STP"] and Samurai_Roll == 'ON' then
equipSet = equipSet["STP"]
end
equip(equipSet)
else
equipSet = sets.Idle
if equipSet[IdleArray[IdleIndex]] then
equipSet = equipSet[IdleArray[IdleIndex]]
end
if buffactive['Reive Mark'] then -- Equip Ygnas's Resolve +1 During Reive --
equipSet = set_combine(equipSet,{neck="Ygnas's Resolve +1"})
end
if world.area:endswith('Adoulin') then
equipSet = set_combine(equipSet,{body="Councilor's Garb"})
end
equip(equipSet)
end
if Twilight == 'Twilight' then
equip(sets.Twilight)
end
end
function buff_change(buff,gain)
buff = string.lower(buff)
if buff == "aftermath: lv.3" then -- AM3 Timer/Countdown --
if gain then
send_command('timers create "Aftermath: Lv.3" 180 down;wait 150;input /echo Aftermath: Lv.3 [WEARING OFF IN 30 SEC.];wait 15;input /echo Aftermath: Lv.3 [WEARING OFF IN 15 SEC.];wait 5;input /echo Aftermath: Lv.3 [WEARING OFF IN 10 SEC.]')
else
send_command('timers delete "Aftermath: Lv.3"')
add_to_chat(123,'AM3: [OFF]')
end
elseif buff == 'weakness' then -- Weakness Timer --
if gain then
send_command('timers create "Weakness" 300 up')
else
send_command('timers delete "Weakness"')
end
end
if buff == "sleep" and gain and player.hp > 200 and player.status == "Engaged" then -- Equip Berserker's Torque When You Are Asleep & Have 200+ HP --
equip({neck="Berserker's Torque"})
else
if not midaction() and not pet_midaction() then
status_change(player.status)
end
end
end
function pet_midcast(spell,action)
if spell.english:startswith('Healing') then
equip(sets.Healing_Breath)
elseif spell.target.type == 'MONSTER' then
equip(sets.Elemental_Breath)
end
end
function pet_aftercast(spell,action)
status_change(player.status)
end
function pet_change(pet,gain)
status_change(player.status)
end
-- In Game: //gs c (command), Macro: /console gs c (command), Bind: gs c (command) --
function self_command(command)
if command == 'C1' then -- Accuracy Level Toggle --
AccIndex = (AccIndex % #AccArray) + 1
add_to_chat(158,'Accuracy Level: ' .. AccArray[AccIndex])
status_change(player.status)
elseif command == 'C9' then -- Attack Toggle --
AttIndex = (AttIndex % #AttArray) + 1
add_to_chat(158,'Attack Level: '..AttArray[AttIndex])
status_change(player.status)
elseif command == 'C5' then -- Auto Update Gear Toggle --
status_change(player.status)
add_to_chat(158,'Auto Update Gear')
elseif command == 'C2' then -- Hybrid Toggle --
if Armor == 'Hybrid' then
Armor = 'None'
add_to_chat(123,'Hybrid Set: [Unlocked]')
else
Armor = 'Hybrid'
add_to_chat(158,'Hybrid Set: '..AccArray[AccIndex])
end
status_change(player.status)
elseif command == 'C7' then -- PDT Toggle --
if Armor == 'PDT' then
Armor = 'None'
add_to_chat(123,'PDT Set: [Unlocked]')
else
Armor = 'PDT'
add_to_chat(158,'PDT Set: [Locked]')
end
status_change(player.status)
elseif command == 'C15' then -- MDT Toggle --
if Armor == 'MDT' then
Armor = 'None'
add_to_chat(123,'MDT Set: [Unlocked]')
else
Armor = 'MDT'
add_to_chat(158,'MDT Set: [Locked]')
end
status_change(player.status)
elseif command == 'C16' then -- Rancor Toggle --
if Rancor == 'ON' then
Rancor = 'OFF'
add_to_chat(123,'Rancor: [OFF]')
else
Rancor = 'ON'
add_to_chat(158,'Rancor: [ON]')
end
status_change(player.status)
elseif command == 'C10' then -- High Jump Enmity Toggle --
if Brais == 'ON' then
Brais = 'OFF'
add_to_chat(123,'High Jump Enmity: [OFF]')
else
Brais = 'ON'
add_to_chat(158,'High Jump Enmity: [ON]')
end
status_change(player.status)
elseif command == 'C17' then -- SAM Roll Toggle --
if Samurai_Roll == 'ON' then
Samurai_Roll = 'OFF'
add_to_chat(123,'SAM Roll: [OFF]')
else
Samurai_Roll = 'ON'
add_to_chat(158,'SAM Roll: [ON]')
end
status_change(player.status)
elseif command == 'C3' then -- Twilight Toggle --
if Twilight == 'Twilight' then
Twilight = 'None'
add_to_chat(123,'Twilight Set: [Unlocked]')
else
Twilight = 'Twilight'
add_to_chat(158,'Twilight Set: [locked]')
end
status_change(player.status)
elseif command == 'C8' then -- Distance Toggle --
if player.target.distance then
target_distance = math.floor(player.target.distance*10)/10
add_to_chat(158,'Distance: '..target_distance)
else
add_to_chat(123,'No Target Selected')
end
elseif command == 'C6' then -- Idle Toggle --
IdleIndex = (IdleIndex % #IdleArray) + 1
add_to_chat(158,'Idle Set: ' .. IdleArray[IdleIndex])
status_change(player.status)
elseif command == 'TP' then
add_to_chat(158,'TP Return: ['..tostring(player.tp)..']')
elseif command:match('^SC%d$') then
send_command('//' .. sc_map[command])
end
end
function check_equip_lock() -- Lock Equipment Here --
if player.equipment.left_ring == "Warp Ring" or player.equipment.left_ring == "Capacity Ring" or player.equipment.right_ring == "Warp Ring" or player.equipment.right_ring == "Capacity Ring" then
disable('ring1','ring2')
elseif player.equipment.back == "Mecisto. Mantle" or player.equipment.back == "Aptitude Mantle +1" or player.equipment.back == "Aptitude Mantle" then
disable('back')
else
enable('ring1','ring2','back')
end
end
function timer_angon()
local duration = 90
send_command('timers create "Angon" '..tostring(duration)..' down')
end
function actualCost(originalCost)
if buffactive["Penury"] then
return originalCost*.5
elseif buffactive["Light Arts"] or buffactive["Addendum: White"] then
return originalCost*.9
elseif buffactive["Dark Arts"] or buffactive["Addendum: Black"] then
return originalCost*1.1
else
return originalCost
end
end
function degrade_spell(spell,degrade_array)
spell_index = table.find(degrade_array,spell.name)
if spell_index > 1 then
new_spell = degrade_array[spell_index - 1]
change_spell(new_spell,spell.target.raw)
add_to_chat(8,spell.name..' Canceled: ['..player.mp..'/'..player.max_mp..'MP::'..player.mpp..'%] Casting '..new_spell..' instead.')
end
end
function change_spell(spell_name,target)
cancel_spell()
send_command('//'..spell_name..' '..target)
end
function refine_waltz(spell,action)
if spell.type ~= 'Waltz' then
return
end
if spell.name == "Healing Waltz" or spell.name == "Divine Waltz" or spell.name == "Divine Waltz II" then
return
end
local newWaltz = spell.english
local waltzID
local missingHP
if spell.target.type == "SELF" then
missingHP = player.max_hp - player.hp
elseif spell.target.isallymember then
local target = find_player_in_alliance(spell.target.name)
local est_max_hp = target.hp / (target.hpp/100)
missingHP = math.floor(est_max_hp - target.hp)
end
if missingHP ~= nil then
if player.sub_job == 'DNC' then
if missingHP < 40 and spell.target.name == player.name then
add_to_chat(123,'Full HP!')
cancel_spell()
return
elseif missingHP < 150 then
newWaltz = 'Curing Waltz'
waltzID = 190
elseif missingHP < 300 then
newWaltz = 'Curing Waltz II'
waltzID = 191
else
newWaltz = 'Curing Waltz III'
waltzID = 192
end
else
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
if player.tp < tpCost and not buffactive.trance then
if player.tp < 20 then
add_to_chat(123, 'Insufficient TP ['..tostring(player.tp)..']. Cancelling.')
cancel_spell()
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(158, downgrade)
end
cancel_spell()
return
end
if missingHP > 0 then
add_to_chat(158,'Trying to cure '..tostring(missingHP)..' HP using '..newWaltz..'.')
end
end
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
Change the aftercast function to
Code
function aftercast(spell,action)
if pet_midaction() or spell.type == "PetCommand" then
return
elseif not spell.interrupted then
if spell.type == "WeaponSkill" then
send_command('wait 0.2;gs c TP')
elseif spell.english == "Angon" then -- Angon Timer/Countdown --
timer_angon()
send_command('wait 80;input /echo '..spell.name..': [WEARING OFF IN 10 SEC.];wait 10;timers delete "Angon";input /echo '..spell.name..': [OFF]')
elseif spell.english == "Ancient Circle" then -- Ancient Circle Countdown --
send_command('wait 260;input /echo '..spell.name..': [WEARING OFF IN 10 SEC.];wait 10;input /echo '..spell.name..': [OFF]')
end
end
status_change(player.status)
end
Sometimes when switching jobs from say thf/dnc to pld/war it'll have my dual wield engaged set as default but if I //lua r gearswap after job change it'll be correct in going to normal engaged mode. Anyway to circumvent this?
That's..interesting. Are you saying your variables aren't getting reset when you change jobs? Can you post your files for PLD?
I notice you're also the person with a problem with NIN feet, can you post your files for that as well.
With brief testing seems to have fixed everything but steady wing for some reason. Not a big deal though, just a prefight JA anyways. Thank you very much.
-------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.Buff.Sentinel = buffactive.sentinel or false
state.Buff.Cover = buffactive.cover or false
state.Buff.Doom = buffactive.Doom or false
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job. Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
state.OffenseMode:options('Normal', 'Acc', 'Mod')
state.HybridMode:options('Normal', 'PDT', 'Reraise')
state.WeaponskillMode:options('Normal', 'Acc')
state.CastingMode:options('Normal', 'Resistant')
state.PhysicalDefenseMode:options('PDT', 'HP', 'Reraise', 'Charm')
state.MagicalDefenseMode:options('MDT', 'HP', 'Reraise', 'Charm')
state.ExtraDefenseMode = M{['description']='Extra Defense Mode', 'None', 'MP', 'Knockback', 'MP_Knockback'}
state.EquipShield = M(false, 'Equip Shield w/Defense')
update_defense_mode()
send_command('bind ^f11 gs c cycle MagicalDefenseMode')
send_command('bind !f11 gs c cycle ExtraDefenseMode')
send_command('bind @f10 gs c toggle EquipShield')
send_command('bind @f11 gs c toggle EquipShield')
select_default_macro_book()
end
function user_unload()
send_command('unbind ^f11')
send_command('unbind !f11')
send_command('unbind @f10')
send_command('unbind @f11')
end
-- Define sets and vars used by this job file.
function init_gear_sets()
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
function job_midcast(spell, action, spellMap, eventArgs)
-- If DefenseMode is active, apply that gear over midcast
-- choices. Precast is allowed through for fast cast on
-- spells, but we want to return to def gear before there's
-- time for anything to hit us.
-- Exclude Job Abilities from this restriction, as we probably want
-- the enhanced effect of whatever item of gear applies to them,
-- and only one item should be swapped out.
if state.DefenseMode.value ~= 'None' and spell.type ~= 'JobAbility' then
handle_equipping_gear(player.status)
eventArgs.handled = true
end
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
-- Called when the player's status changes.
function job_state_change(field, new_value, old_value)
classes.CustomDefenseGroups:clear()
classes.CustomDefenseGroups:append(state.ExtraDefenseMode.current)
if state.EquipShield.value == true then
classes.CustomDefenseGroups:append(state.DefenseMode.current .. 'Shield')
end
classes.CustomMeleeGroups:clear()
classes.CustomMeleeGroups:append(state.ExtraDefenseMode.current)
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Called by the 'update' self-command, for common needs.
-- Set eventArgs.handled to true if we don't want automatic equipping of gear.
function job_update(cmdParams, eventArgs)
update_defense_mode()
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if player.mpp < 51 then
idleSet = set_combine(idleSet, sets.latent_refresh)
end
if state.Buff.Doom then
idleSet = set_combine(idleSet, sets.buff.Doom)
end
return idleSet
end
-- Modify the default melee set after it was constructed.
function customize_melee_set(meleeSet)
if state.Buff.Doom then
meleeSet = set_combine(meleeSet, sets.buff.Doom)
end
return meleeSet
end
function customize_defense_set(defenseSet)
if state.ExtraDefenseMode.value ~= 'None' then
defenseSet = set_combine(defenseSet, sets[state.ExtraDefenseMode.value])
end
if state.EquipShield.value == true then
defenseSet = set_combine(defenseSet, sets[state.DefenseMode.current .. 'Shield'])
end
if state.Buff.Doom then
defenseSet = set_combine(defenseSet, sets.buff.Doom)
end
return defenseSet
end
function display_current_job_state(eventArgs)
local msg = 'Melee'
if state.CombatForm.has_value then
msg = msg .. ' (' .. state.CombatForm.value .. ')'
end
msg = msg .. ': '
msg = msg .. state.OffenseMode.value
if state.HybridMode.value ~= 'Normal' then
msg = msg .. '/' .. state.HybridMode.value
end
msg = msg .. ', WS: ' .. state.WeaponskillMode.value
if state.DefenseMode.value ~= 'None' then
msg = msg .. ', Defense: ' .. state.DefenseMode.value .. ' (' .. state[state.DefenseMode.value .. 'DefenseMode'].value .. ')'
end
if state.ExtraDefenseMode.value ~= 'None' then
msg = msg .. ', Extra: ' .. state.ExtraDefenseMode.value
end
if state.EquipShield.value == true then
msg = msg .. ', Force Equip Shield'
end
if state.Kiting.value == true then
msg = msg .. ', Kiting'
end
if state.PCTargetMode.value ~= 'default' then
msg = msg .. ', Target PC: '..state.PCTargetMode.value
end
if state.SelectNPCTargets.value == true then
msg = msg .. ', Target NPCs'
end
add_to_chat(122, msg)
eventArgs.handled = true
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
function update_defense_mode()
if player.equipment.main == 'Kheshig Blade' and not classes.CustomDefenseGroups:contains('Kheshig Blade') then
classes.CustomDefenseGroups:append('Kheshig Blade')
end
if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
if player.equipment.sub and not player.equipment.sub:contains('Shield') and
player.equipment.sub ~= 'Aegis' and player.equipment.sub ~= 'Ochain' then
state.CombatForm:set('DW')
else
state.CombatForm:reset()
end
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'DNC' then
set_macro_page(2, 11)
elseif player.sub_job == 'NIN' then
set_macro_page(3, 11)
elseif player.sub_job == 'RDM' then
set_macro_page(4, 11)
else
set_macro_page(1, 11)
end
end
-------------------------------------------------------------------------------------------------------------------
-- Setup functions for this job. Generally should not be modified.
-------------------------------------------------------------------------------------------------------------------
-- Initialization function for this job file.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include('Mote-Include.lua')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.Buff.Migawari = buffactive.migawari or false
state.Buff.Doom = buffactive.doom or false
state.Buff.Yonin = buffactive.Yonin or false
state.Buff.Innin = buffactive.Innin or false
state.Buff.Futae = buffactive.Futae or false
determine_haste_group()
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job. Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
state.OffenseMode:options('Normal', 'Acc')
state.HybridMode:options('Normal', 'Evasion', 'PDT')
state.WeaponskillMode:options('Normal', 'Acc', 'Mod')
state.CastingMode:options('Normal', 'Resistant')
state.PhysicalDefenseMode:options('PDT', 'Evasion')
gear.MovementFeet = {name="Danzo Sune-ate"}
gear.DayFeet = "Danzo Sune-ate"
gear.NightFeet = "Ninja Kyahan"
select_movement_feet()
select_default_macro_book()
end
-- Define sets and vars used by this job file.
function init_gear_sets()
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for standard casting events.
-------------------------------------------------------------------------------------------------------------------
-- Run after the general midcast() is done.
-- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
function job_post_midcast(spell, action, spellMap, eventArgs)
if state.Buff.Doom then
equip(sets.buff.Doom)
end
end
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_aftercast(spell, action, spellMap, eventArgs)
if not spell.interrupted and spell.english == "Migawari: Ichi" then
state.Buff.Migawari = true
end
end
-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks for non-casting events.
-------------------------------------------------------------------------------------------------------------------
-- Called when a player gains or loses a buff.
-- buff == buff gained or lost
-- gain == true if the buff was gained, false if it was lost.
function job_buff_change(buff, gain)
-- If we gain or lose any haste buffs, adjust which gear set we target.
if S{'haste','march','embrava','haste samba'}:contains(buff:lower()) then
determine_haste_group()
handle_equipping_gear(player.status)
elseif state.Buff[buff] ~= nil then
handle_equipping_gear(player.status)
end
end
function job_status_change(new_status, old_status)
if new_status == 'Idle' then
select_movement_feet()
end
end
-------------------------------------------------------------------------------------------------------------------
-- User code that supplements standard library decisions.
-------------------------------------------------------------------------------------------------------------------
-- Get custom spell maps
function job_get_spell_map(spell, default_spell_map)
if spell.skill == "Ninjutsu" then
if not default_spell_map then
if spell.target.type == 'SELF' then
return 'NinjutsuBuff'
else
return 'NinjutsuDebuff'
end
end
end
end
-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if state.Buff.Migawari then
idleSet = set_combine(idleSet, sets.buff.Migawari)
end
if state.Buff.Doom then
idleSet = set_combine(idleSet, sets.buff.Doom)
end
return idleSet
end
-- Modify the default melee set after it was constructed.
function customize_melee_set(meleeSet)
if state.Buff.Migawari then
meleeSet = set_combine(meleeSet, sets.buff.Migawari)
end
if state.Buff.Doom then
meleeSet = set_combine(meleeSet, sets.buff.Doom)
end
return meleeSet
end
-- Called by the default 'update' self-command.
function job_update(cmdParams, eventArgs)
select_movement_feet()
determine_haste_group()
end
-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------
function determine_haste_group()
-- We have three groups of DW in gear: Hachiya body/legs, Iga head + Patentia Sash, and DW earrings
-- Standard gear set reaches near capped delay with just Haste (77%-78%, depending on HQs)
-- For high haste, we want to be able to drop one of the 10% groups.
-- Basic gear hits capped delay (roughly) with:
-- 1 March + Haste
-- 2 March
-- Haste + Haste Samba
-- 1 March + Haste Samba
-- Embrava
-- High haste buffs:
-- 2x Marches + Haste Samba == 19% DW in gear
-- 1x March + Haste + Haste Samba == 22% DW in gear
-- Embrava + Haste or 1x March == 7% DW in gear
-- For max haste (capped magic haste + 25% gear haste), we can drop all DW gear.
-- Max haste buffs:
-- Embrava + Haste+March or 2x March
-- 2x Marches + Haste
-- So we want four tiers:
-- Normal DW
-- 20% DW -- High Haste
-- 7% DW (earrings) - Embrava Haste (specialized situation with embrava and haste, but no marches)
-- 0 DW - Max Haste
classes.CustomMeleeGroups:clear()
if buffactive.embrava and (buffactive.march == 2 or (buffactive.march and buffactive.haste)) then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive.march == 2 and buffactive.haste then
classes.CustomMeleeGroups:append('MaxHaste')
elseif buffactive.embrava and (buffactive.haste or buffactive.march) then
classes.CustomMeleeGroups:append('EmbravaHaste')
elseif buffactive.march == 1 and buffactive.haste and buffactive['haste samba'] then
classes.CustomMeleeGroups:append('HighHaste')
elseif buffactive.march == 2 then
classes.CustomMeleeGroups:append('HighHaste')
end
end
function select_movement_feet()
if world.time >= 17*60 or world.time < 7*60 then
gear.MovementFeet.name = gear.NightFeet
else
gear.MovementFeet.name = gear.DayFeet
end
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == 'DNC' then
set_macro_page(2, 10)
elseif player.sub_job == 'WAR' then
set_macro_page(1, 10)
else
set_macro_page(3, 10)
end
end
Sorry to bother again, very similar situation with Ninja swap.. just swapped to Bokura's newest Ninja swap and aftercast is not working correctly, tried to mimic dragoon's fix (-pet part) with no success... also not reading haste buffs at all..
So, your equipment should always be inside a function called init_gear_sets(). This is because, otherwise, at the time that all of those tables are added to memory, gear.MovementFeet doesn't even exist yet (because the function it's inside hasn't been called). Having everything in functions lets us control when everything is created so that we can be sure it's being set up in the right order.
Code
function init_gear_sets()
--all your equipment stuff here!
end
function update_defense_mode()
if player.equipment.main == 'Kheshig Blade' and not classes.CustomDefenseGroups:contains('Kheshig Blade') then
classes.CustomDefenseGroups:append('Kheshig Blade')
end
if player.sub_job == 'NIN' or player.sub_job == 'DNC' then
if player.equipment.sub and not player.equipment.sub:contains('Shield') and
player.equipment.sub ~= 'Aegis' and player.equipment.sub ~= 'Ochain' then
state.CombatForm:set('DW')
else
state.CombatForm:reset()
end
end
end
GS files are loaded only when you change your main job, not sub job. So if you switch to PLD from JOB/DNC or JOB/NIN, and don't have Ochain/Aegis on, it will set you in DW mode. I'd assume the problem is when you change your sub job after that.
However, it looks like Mote is triggering '//gs c update' when you change sub job, which in turn should end up calling that function again and updating properly...so it shouldn't be doing this.
You could try adding this (anywhere inside the file is fine, but outside of any other function; for example, at the very end).
Code
function job_sub_job_change(new,old)
job_update()
end
but otherwise the only solutions I have are to '//gs c update' or '//gs r' when it occurs.
Sorry to bother again, very similar situation with Ninja swap.. just swapped to Bokura's newest Ninja swap and aftercast is not working correctly, tried to mimic dragoon's fix (-pet part) with no success... also not reading haste buffs at all..
-- *** Credit goes to Flippant for helping me with Gearswap *** --
-- ** I Use Some of Motenten's Functions ** --
function get_sets()
AccIndex = 1
AccArray = {"LowACC","MidACC","HighACC"} -- 3 Levels Of Accuracy Sets For TP/WS/Hybrid. First Set Is LowACC. Add More ACC Sets If Needed Then Create Your New ACC Below --
IdleIndex = 1
IdleArray = {'Movement','Regen'} -- Default Idle Set Is Movement --
TypeIndex = 1
Armor = 'None'
Obi = 'ON' -- Set Default Obi ON or OFF Here --
Attack = 'OFF' -- Set Default Attack WS Set ON or OFF Here --
Migawari = 'OFF' -- Set Default Migawari Body ON or OFF Here --
Rancor = 'OFF' -- Set Default Rancor ON or OFF Here --
target_distance = 10 -- Set Default Distance Here --
-- Gavialis Helm --
elements = {}
elements.equip = {head="Gavialis Helm"}
elements["Blade: Shun"] = S{"Light","Lightning","Fire"}
sc_map = {SC1="BladeHi", SC2="UtsusemiSan", SC3="UtsusemiNi"} -- 3 Additional Binds. Can Change Whatever JA/WS/Spells You Like Here. Remember Not To Use Spaces. --
sets.Idle = {}
-- Idle/Town Sets --
sets.Idle.Regen = {
ammo="Staunch Tathlum",
head="Rao Kabuto",
neck="Bathy Choker +1",
ear1="Infused Earring",
ear2="Etiolation Earring",
body="Hizamaru Haramaki +1",
hands="Rao Kote",
ring1="Shneddick Ring",
ring2="Paguroidea Ring",
back="Shadow Mantle",
waist="Lycopodium Sash",
legs="Rao Haidate",
feet="Hachiya Kyahan +1"}
sets.Idle.Movement = set_combine(sets.Idle.Regen,{})
-- Normal TP Sets --
sets.TP = {
ammo="Happo Shuriken +1",
head={ name="Ryuo Somen", augments={'STR+10','DEX+10','Accuracy+15',}},
neck="Erudition Necklace",
ear2="Eabani Earring",
ear1="Suppanomimi",
body="Adhemar Jacket",
hands="Floral Gauntlets",
ring1="Epona's Ring",
ring2="Petrov Ring",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},
waist="Patentia Sash",
legs="Samnuha Tights",
feet="Hizamaru Sune-Ate +1"}
sets.TP.MidACC = set_combine(sets.TP,{
neck="Combatant's Torque",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},
--waist="Eschan Stone",
})
sets.TP.HighACC = set_combine(sets.TP.MidACC,{
hands="Herculean Gloves",
body="Herculean Vest",
feet={ name="Herculean Boots", augments={'Attack+29','"Triple Atk."+4','AGI+7','Accuracy+14',}},
waist="Eschan Stone",
ring1="Ramuh Ring +1",
ring2="Begrudging Ring",
legs="Hattori Hakama +1",
left_ear="Dignitary's Earring",
right_ear="Zennaroi Earring",})
-- March x2 --
-- March + Haste + Haste Samba --
-- Geo Haste --
-- Mid Haste: 19% - 22% In Gear --
sets.TP.MidHaste = {
ammo="Happo Shuriken +1",
head={ name="Ryuo Somen", augments={'STR+10','DEX+10','Accuracy+15',}},
neck="Erudition Necklace",
ear1="Suppanomimi",
ear2="Eabani Earring",
body="Adhemar Jacket",
hands="Herculean Gloves",
ring1="Epona's Ring",
ring2="Petrov Ring",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},
waist="Windbuffet Belt +1",
legs="Samnuha Tights",
feet={ name="Herculean Boots", augments={'Attack+29','"Triple Atk."+4','AGI+7','Accuracy+14',}},}
sets.TP.MidACC.MidHaste = set_combine(sets.TP.MidHaste,{
neck="Combatant's Torque",
--waist="Eschan Stone",
})
sets.TP.HighACC.MidHaste = set_combine(sets.TP.MidACC.MidHaste,{
hands="Herculean Gloves",
body="Herculean Vest",
waist="Eschan Stone",
ring1="Ramuh Ring +1",
ring2="Begrudging Ring",
legs="Hattori Hakama +1",
left_ear="Dignitary's Earring",
right_ear="Zennaroi Earring",})
-- Embrava + (Haste or March) --
-- Embrava Haste: 7% DW In Gear --
sets.TP.EmbravaHaste = {
ammo="Happo Shuriken +1",
--head="Adhemar Bonnet +1",
head={ name="Ryuo Somen", augments={'STR+10','DEX+10','Accuracy+15',}},
neck="Erudition Necklace",
ear1="Cessance Earring",
ear2="Brutal Earring",
body="Herculean Vest",
hands="Herculean Gloves",
ring1="Epona's Ring",
ring2="Petrov Ring",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},
waist="Windbuffet Belt +1",
legs="Samnuha Tights",
feet={ name="Herculean Boots", augments={'Attack+29','"Triple Atk."+4','AGI+7','Accuracy+14',}},}
sets.TP.MidACC.EmbravaHaste = set_combine(sets.TP.EmbravaHaste,{
neck="Combatant's Torque",
--waist="Eschan Stone"
})
sets.TP.HighACC.EmbravaHaste = set_combine(sets.TP.MidACC.EmbravaHaste,{
head={ name="Ryuo Somen", augments={'STR+10','DEX+10','Accuracy+15',}},
ring1="Ramuh Ring+1",
ring2="Begrudging Ring",
waist="Eschan Stone",
legs="Hattori Hakama +1",
left_ear="Dignitary's Earring",
right_ear="Zennaroi Earring",})
-- March x2 + Haste --
-- Embrava + (March x2 or March + Haste) --
-- Geo Haste + (March or Haste or Embrava) --
-- Max Haste: Can Drop All DW Gear --
sets.TP.MaxHaste = {
ammo="Happo Shuriken +1",
head="Adhemar Bonnet +1",
neck="Erudition Necklace",
ear1="Cessance Earring",
ear2="Brutal Earring",
body="Herculean Vest",
hands="Herculean Gloves",
ring1="Epona's Ring",
ring2="Petrov Ring",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},
waist="Windbuffet Belt +1",
legs="Samnuha Tights",
feet={ name="Herculean Boots", augments={'Attack+29','"Triple Atk."+4','AGI+7','Accuracy+14',}},}
sets.TP.MidACC.MaxHaste = set_combine(sets.TP.MaxHaste,{
neck="Combatant's Torque",
--waist="Eschan Stone",
})
sets.TP.HighACC.MaxHaste = set_combine(sets.TP.MidACC.MaxHaste,{
head={ name="Ryuo Somen", augments={'STR+10','DEX+10','Accuracy+15',}},
ring1="Ramuh Ring +1",
ring2="Begrudging Ring",
waist="Eschan Stone",
legs="Hattori Hakama +1",
left_ear="Dignitary's Earring",
right_ear="Zennaroi Earring",})
-- TP Rancor Neck --
sets.TP.Rancor = {neck="Rancor Collar"}
-- TP Migawari Set --
sets.TP.Migawari = {body="Hattori Ningi +1"}
-- PDT/MDT Sets --
sets.PDT = {
ammo="Staunch Tathlum",
head="Adhemar Bonnet",
neck="Twilight Torque",
ear1="Infused Earring",
ear2="Genmei Earring",
body="Emet Harness +1",
hands="Umuthi Gloves",
ring1="Shneddick Ring",
ring2="Defending Ring",
back="Shadow Mantle",
waist="Flume Belt",
legs="Otronif Brais +1",
feet="Otronif Boots +1"}
sets.MDT = set_combine(sets.PDT,{
hands="Floral Gauntlets",
ear1="Sanare Earring",
ear2="Etiolation Earring",
ring1="Shadow Ring",
back="Engulfer Cape +1"})
-- Hybrid/Evasion Sets --
sets.TP.Hybrid = set_combine(sets.PDT,{
ammo="Happo Shuriken +1",
--head="Ynglinga Sallet",
legs="Ryuo Hakama",
hands="Herculean Gloves",
feet={ name="Herculean Boots", augments={'Attack+29','"Triple Atk."+4','AGI+7','Accuracy+14',}},
ear1="Dignitary's Earring",
back="Agema Cape",
ring1="Patricius Ring"})
sets.TP.Hybrid.MidACC = set_combine(sets.TP.Hybrid,{})
sets.TP.Hybrid.HighACC = set_combine(sets.TP.Hybrid.MidACC,{})
sets.Evasion = set_combine(sets.PDT,{})
-- WS Base Set --
sets.WS = {
ammo="Ginsen",
head="Adhemar Bonnet +1",
neck="Fotia Gorget",
ear1="Moonshade Earring",
ear2="Brutal Earring",
body="Adhemar Jacket",
hands="Herculean Gloves",
ring1="Epona's Ring",
ring2="Rajas Ring",
back={ name="Andartia's Mantle", augments={'AGI+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}},
waist="Fotia Belt",
legs="Samnuha Tights",
feet={ name="Herculean Boots", augments={'Attack+29','"Triple Atk."+4','AGI+7','Accuracy+14',}},}
-- Blade: Hi Sets --
sets.WS["Blade: Hi"] = {
ammo="Yetshila",
head="Adhemar Bonnet +1",
neck="Fotia Gorget",
ear1="Moonshade Earring",
ear2="Ishvara Earring",
body="Abnoba Kaftan",
hands="Kobo Kote",
--hands="Ryuo Tekko",
ring1="Epona's Ring",
--ring2="Garuda Ring +1",
ring2="Begrudging Ring",
back={ name="Andartia's Mantle", augments={'AGI+20','Accuracy+20 Attack+20','Weapon skill damage +10%',}},
waist="Fotia Belt",
legs="Hizamaru Hizayoroi +1",
--legs="Samnuha Tights",
feet={ name="Herculean Boots", augments={'Attack+29','"Triple Atk."+4','AGI+7','Accuracy+14',}},}
sets.WS["Blade: Hi"].MidACC = set_combine(sets.WS["Blade: Hi"],{
hands="Ryuo Tekko",})
sets.WS["Blade: Hi"].HighACC = set_combine(sets.WS["Blade: Hi"].MidACC,{
head="Ynglinga Sallet",
--body="Herculean Vest",
neck="Combatant's Torque",
ring1="Ramuh Ring +1",
waist="Olseni Belt",
legs="Hizamaru Hizayoroi +1",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},
ear2="Zennaroi Earring",})
-- Blade: Hi(Attack) Set --
sets.WS["Blade: Hi"].ATT = set_combine(sets.WS["Blade: Hi"],{})
-- Blade: Shun Sets --
sets.WS["Blade: Shun"] = {
ammo="Jukukik Feather",
head="Adhemar Bonnet +1",
neck="Fotia Gorget",
ear1="Moonshade Earring",
ear2="Brutal Earring",
body="Adhemar Jacket",
hands="Herculean Gloves",
ring1="Epona's Ring",
ring2="Ramuh Ring +1",
back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','"Dbl.Atk."+10',}},
waist="Fotia Belt",
legs="Samnuha Tights",
feet={ name="Herculean Boots", augments={'Attack+29','"Triple Atk."+4','AGI+7','Accuracy+14',}},}
sets.WS["Blade: Shun"].MidACC = set_combine(sets.WS["Blade: Shun"],{})
sets.WS["Blade: Shun"].HighACC = set_combine(sets.WS["Blade: Shun"].MidACC,{
head="Ynglinga Sallet",
neck="Combatant's Torque",
body="Herculean Vest",
ring2="Ramuh Ring +1",
waist="Olseni Belt",
legs="Hizamaru Hizayoroi +1",
left_ear="Zennaroi Earring",})
-- Blade: Shun(Attack) Set --
sets.WS["Blade: Shun"].ATT = set_combine(sets.WS["Blade: Shun"],{})
sets.WS["Blade: Yu"] = {
ammo="Pemphredo Tathlum",
head="Mochizuki Hatsuburi +1",
neck="Sanctity Necklace",
ear1="Friomisi Earring",
ear2="Crematio Earring",
body="Samnuha Coat",
hands="Leyline Gloves",
ring1="Shiva Ring +1",
ring2="Shiva Ring +1",
back={ name="Andartia's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','"Mag.Atk.Bns."+10',}},
waist="Eschan Stone",
legs="Herculean Trousers",
feet={ name="Herculean Boots", augments={'Mag. Acc.+1','"Fast Cast"+5','MND+10','"Mag.Atk.Bns."+14',}},}
sets.WS.Exenterator = {}
sets.WS.Evisceration = {}
sets.WS["Sanguine Blade"] = {}
-- Waltz Set --
sets.Waltz = {}
sets.Precast = {}
-- Fastcast Set --
sets.Precast.FastCast = {
ammo="Impatiens",
head="Herculean Helm",
neck="Orunmila's Torque",
ear1="Loquac. Earring",
ear2="Etiolation Earring",
body="Dread Jupon",
hands="Leyline Gloves",
ring1="Prolix Ring",
ring2="Veneficium Ring",
back={ name="Andartia's Mantle", augments={'AGI+20','Eva.+20 /Mag. Eva.+20','"Fast Cast"+10',}},
legs="Herculean Trousers",
feet={ name="Herculean Boots", augments={'Mag. Acc.+1','"Fast Cast"+5','MND+10','"Mag.Atk.Bns."+14',}},}
-- Utsusemi Precast Set --
sets.Precast.Utsusemi = set_combine(sets.Precast.FastCast,{neck="Magoraga Beads",body="Passion Jacket"})
sets.Midcast = {}
-- -- Magic Haste/Utsusemi Set --
sets.Midcast.Haste = {
head="Herculean Helm",
neck="Orunmila's Torque",
ear1="Loquacious Earring",
ear2="Etiolation Earring",
body="Dread Jupon",
hands="Leyline Gloves",
ring1="Prolix Ring",
ring2="Defending Ring",
back={ name="Andartia's Mantle", augments={'AGI+20','Eva.+20 /Mag. Eva.+20','"Fast Cast"+10',}},
waist="Flume Belt",
legs="Herculean Trousers",
feet="Hattori Kyahan +1"}
-- Migawari Magic Set --
sets.Midcast.Migawari = {
head={ name="Ryuo Somen", augments={'Ninjutsu skill +15','Mag. Acc.+20','"Mag.Atk.Bns."+20',}},
neck="Incanter's Torque",
ear1="Loquacious Earring",
ear2="Stealth Earring",
body="Dread Jupon",
hands="Leyline Gloves",
ring1="Prolix Ring",
ring2="Defending Ring",
back="Astute Cape",
waist="Cimmerian Sash",
legs="Herculean Trousers",
feet="Mochizuki Kyahan +1"}
-- Ninjutsu Set --
sets.Midcast.Ninjutsu = {
ammo="Pemphredo Tathlum",
head={ name="Ryuo Somen", augments={'Ninjutsu skill +15','Mag. Acc.+20','"Mag.Atk.Bns."+20',}},
neck="Incanter's Torque",
ear1="Dignitary's Earring",
ear2="Stealth Earring",
body="Samnuha Coat",
hands="Leyline Gloves",
ring1="Prolix Ring",
ring2="Sangoma Ring",
back={ name="Andartia's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','"Mag.Atk.Bns."+10',}},
waist="Eschan Stone",
legs="Herculean Trousers",
feet="Mochizuki Kyahan +1"}
-- Elemental Ninjutsu Set --
sets.Midcast.Elemental_Ninjutsu = {
ammo="Pemphredo Tathlum",
head="Mochizuki Hatsuburi +1",
neck="Sanctity Necklace",
ear1="Friomisi Earring",
ear2="Crematio Earring",
body="Samnuha Coat",
hands="Leyline Gloves",
ring1="Shiva Ring +1",
ring2="Shiva Ring +1",
--ring1="Mujin Band",
--ring2="Locus Ring",
back={ name="Andartia's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','"Mag.Atk.Bns."+10',}},
waist="Eschan Stone",
--waist="Hachirin-no-Obi",
legs="Herculean Trousers",
feet={ name="Herculean Boots", augments={'Mag. Acc.+1','"Fast Cast"+5','MND+10','"Mag.Atk.Bns."+14',}},}
end
function pretarget(spell,action)
if spell.action_type == 'Magic' and buffactive.silence then -- Auto Use Echo Drops If You Are Silenced --
cancel_spell()
send_command('input /item "Echo Drops" <me>')
elseif spell.type == "WeaponSkill" and spell.target.distance > target_distance and player.status == 'Engaged' then -- Cancel WS If You Are Out Of Range --
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Out of Range]')
return
end
end
function precast(spell,action)
if spell.type == "WeaponSkill" then
if player.status ~= 'Engaged' then -- Cancel WS If You Are Not Engaged. Can Delete It If You Don't Need It --
cancel_spell()
add_to_chat(123,'Unable To Use WeaponSkill: [Disengaged]')
return
else
equipSet = sets.WS
if equipSet[spell.english] then
equipSet = equipSet[spell.english]
end
if Attack == 'ON' then
equipSet = equipSet["ATT"]
end
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
if elements[spell.name] and elements[spell.name]:contains(world.day_element) then
equipSet = set_combine(equipSet,elements.equip)
end
if buffactive['Reive Mark'] then -- Equip Ygnas's Resolve +1 During Reive --
equipSet = set_combine(equipSet,{neck="Ygnas's Resolve +1"})
end
if TypeIndex == 1 and spell.english == "Blade: Hi" then
if world.time <= (7*60) or world.time >= (17*60) then -- Equip Lugra Earring +1 & Lugra Earring From Dusk To Dawn --
equipSet = set_combine(equipSet,{ear1="Lugra Earring +1",ear2="Lugra Earring"})
elseif player.tp > 2990 then
equipSet = set_combine(equipSet,{ear1="Cessance Earring"}) -- 3000 TP: Equip Auster's Pearl --
end
end
if TypeIndex == 1 and spell.english == "Blade: Shun" and player.tp > 2990 then
if world.time <= (7*60) or world.time >= (17*60) then -- 3000 TP: Equip Lugra Earring +1 From Dusk To Dawn --
equipSet = set_combine(equipSet,{ear1="Lugra Earring +1"})
else
equipSet = set_combine(equipSet,{ear1="Cessance Earring"}) -- 3000 TP: Equip Jupiter's Pearl --
end
end
equip(equipSet)
end
elseif spell.action_type == 'Magic' then
if buffactive.silence or spell.target.distance > 16+target_distance then -- Cancel Magic or Ninjutsu If You Are Silenced or Out of Range --
cancel_spell()
add_to_chat(123, spell.name..' Canceled: [Silenced or Out of Casting Range]')
return
else
if spell.english:startswith('Utsusemi') then
if spell.english == 'Utsusemi: Ni' then
if buffactive['Copy Image'] or buffactive['Copy Image (2)'] or buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then
send_command('cancel Copy Image*')
end
equip(sets.Precast.Utsusemi)
else
equip(sets.Precast.Utsusemi)
end
else
equip(sets.Precast.FastCast)
end
end
elseif spell.type == "Waltz" then
refine_waltz(spell,action)
equip(sets.Waltz)
elseif spell.english == 'Spectral Jig' and buffactive.Sneak then
cast_delay(0.2)
send_command('cancel Sneak')
end
end
function midcast(spell,action)
equipSet = {}
if spell.action_type == 'Magic' then
equipSet = sets.Midcast
if spell.english:startswith('Utsusemi') then
if spell.english == 'Utsusemi: Ichi' and (buffactive['Copy Image'] or buffactive['Copy Image (2)'] or buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)']) then
send_command('@wait 1.7;cancel Copy Image*')
end
equipSet = equipSet.Haste
elseif spell.english == 'Monomi: Ichi' then
if buffactive['Sneak'] then
send_command('@wait 1.7;cancel sneak')
end
equipSet = equipSet.Haste
elseif spell.english:startswith('Tonko') then
equipSet = equipSet.Haste
elseif spell.english == 'Migawari: Ichi' then
equipSet = equipSet.Migawari
elseif spell.english:startswith('Katon') or spell.english:startswith('Suiton') or spell.english:startswith('Doton') or spell.english:startswith('Hyoton') or spell.english:startswith('Huton') or spell.english:startswith('Raiton') then
equipSet = equipSet.Elemental_Ninjutsu
if (world.day_element == spell.element or world.weather_element == spell.element) and Obi == 'ON' then
equipSet = set_combine(equipSet,{waist="Hachirin-no-Obi"})
end
elseif equipSet[spell.skill] then
equipSet = equipSet[spell.skill]
end
elseif equipSet[spell.english] then
equipSet = equipSet[spell.english]
end
equip(equipSet)
end
function aftercast(spell,action)
if not spell.interrupted then
if spell.type == "WeaponSkill" then
send_command('wait 0.2;gs c TP')
end
status_change(player.status)
end
end
function status_change(new,old)
check_equip_lock()
if Armor == 'PDT' then
equip(sets.PDT)
elseif Armor == 'MDT' then
equip(sets.MDT)
elseif Armor == 'EVA' then
equip(sets.Evasion)
elseif new == 'Engaged' then
equipSet = sets.TP
if Armor == 'Hybrid' and equipSet["Hybrid"] then
equipSet = equipSet["Hybrid"]
end
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
if (buffactive.Haste and buffactive.March == 2) or (buffactive.Embrava and (buffactive.March == 2 or (buffactive.March and buffactive.Haste))) or (buffactive[580] and (buffactive.March or buffactive.Haste or buffactive.Embrava)) and equipSet["MaxHaste"] then
equipSet = equipSet["MaxHaste"]
end
if (buffactive.March == 1 and buffactive.Haste and buffactive["Haste Samba"]) or buffactive.March == 2 or buffactive[580] and equipSet["MidHaste"] then
equipSet = equipSet["MidHaste"]
end
if buffactive.Embrava and (buffactive.March or buffactive.Haste) and equipSet["EmbravaHaste"] then
equipSet = equipSet["EmbravaHaste"]
end
if Rancor == 'ON' then -- Use Rancor Toggle For Rancor Collar --
equipSet = set_combine(equipSet,sets.TP.Rancor)
end
equip(equipSet)
else
equipSet = sets.Idle
if equipSet[IdleArray[IdleIndex]] then
equipSet = equipSet[IdleArray[IdleIndex]]
end
if buffactive['Reive Mark'] then -- Equip Ygnas's Resolve +1 During Reive --
equipSet = set_combine(equipSet,{neck="Ygnas's Resolve +1"})
end
if world.time <= (7*60) or world.time >= (17*60) then -- Equip Hachi. Kyahan +1 From Dusk To Dawn --
equipSet = set_combine(equipSet,{feet="Hachi. Kyahan +1"})
end
if world.area:endswith('Adoulin') then
equipSet = set_combine(equipSet,{body="Councilor's Garb"})
end
equip(equipSet)
end
if buffactive.Migawari and Migawari == 'ON' then -- Use Migawari Toggle To Lock Hattori Ningi +1 When You Have Migawari On --
equip(sets.TP.Migawari)
end
end
function buff_change(buff,gain)
buff = string.lower(buff)
if buff == "aftermath: lv.3" then -- AM3 Timer/Countdown --
if gain then
send_command('timers create "Aftermath: Lv.3" 180 down;wait 150;input /echo Aftermath: Lv.3 [WEARING OFF IN 30 SEC.];wait 15;input /echo Aftermath: Lv.3 [WEARING OFF IN 15 SEC.];wait 5;input /echo Aftermath: Lv.3 [WEARING OFF IN 10 SEC.]')
else
send_command('timers delete "Aftermath: Lv.3"')
add_to_chat(123,'AM3: [OFF]')
end
elseif buff == 'weakness' then -- Weakness Timer --
if gain then
send_command('timers create "Weakness" 300 up')
else
send_command('timers delete "Weakness"')
end
end
if not midaction() then
status_change(player.status)
end
end
-- In Game: //gs c (command), Macro: /console gs c (command), Bind: gs c (command) --
function self_command(command)
if command == 'C1' then -- Accuracy Toggle --
AccIndex = (AccIndex % #AccArray) + 1
status_change(player.status)
add_to_chat(158,'Accuracy Level: ' .. AccArray[AccIndex])
elseif command == 'C5' then -- Auto Update Gear Toggle --
status_change(player.status)
add_to_chat(158,'Auto Update Gear')
elseif command == 'C2' then -- Hybrid Toggle --
if Armor == 'Hybrid' then
Armor = 'None'
add_to_chat(123,'Hybrid Set: [Unlocked]')
else
Armor = 'Hybrid'
add_to_chat(158,'Hybrid Set: '..AccArray[AccIndex])
end
status_change(player.status)
elseif command == 'C7' then -- PDT Toggle --
if Armor == 'PDT' then
Armor = 'None'
add_to_chat(123,'PDT Set: [Unlocked]')
else
Armor = 'PDT'
add_to_chat(158,'PDT Set: [Locked]')
end
status_change(player.status)
elseif command == 'C15' then -- MDT Toggle --
if Armor == 'MDT' then
Armor = 'None'
add_to_chat(123,'MDT Set: [Unlocked]')
else
Armor = 'MDT'
add_to_chat(158,'MDT Set: [Locked]')
end
status_change(player.status)
elseif command == 'C10' then -- Migawari Set Toggle --
if Migawari == 'ON' then
Migawari = 'OFF'
add_to_chat(123,'Migawari Set: [Unlocked]')
else
Migawari = 'ON'
add_to_chat(158,'Migawari Set: [Locked]')
end
status_change(player.status)
elseif command == 'C3' then -- Evasion Toggle --
if Armor == 'EVA' then
Armor = 'None'
add_to_chat(123,'Evasion Set: [Unlocked]')
else
Armor = 'EVA'
add_to_chat(158,'Evasion Set: [Locked]')
end
status_change(player.status)
elseif command == 'C16' then -- Rancor Toggle --
if Rancor == 'ON' then
Rancor = 'OFF'
add_to_chat(123,'Rancor: [OFF]')
else
Rancor = 'ON'
add_to_chat(158,'Rancor: [ON]')
end
status_change(player.status)
elseif command == 'C9' then -- Attack Toggle --
if Attack == 'ON' then
Attack = 'OFF'
add_to_chat(123,'Attack: [OFF]')
else
Attack = 'ON'
add_to_chat(158,'Attack: [ON]')
end
status_change(player.status)
elseif command == 'C11' then -- Obi Toggle --
if Obi == 'ON' then
Obi = 'OFF'
add_to_chat(123,'Obi: [OFF]')
else
Obi = 'ON'
add_to_chat(158,'Obi: [ON]')
end
status_change(player.status)
elseif command == 'C8' then -- Distance Toggle --
if player.target.distance then
target_distance = math.floor(player.target.distance*10)/10
add_to_chat(158,'Distance: '..target_distance)
else
add_to_chat(123,'No Target Selected')
end
elseif command == 'C6' then -- Idle Toggle --
IdleIndex = (IdleIndex % #IdleArray) + 1
status_change(player.status)
add_to_chat(158,'Idle Set: ' .. IdleArray[IdleIndex])
elseif command == 'TP' then
add_to_chat(158,'TP Return: ['..tostring(player.tp)..']')
elseif command:match('^SC%d$') then
send_command('//' .. sc_map[command])
end
end
function check_equip_lock() -- Lock Equipment Here --
if player.equipment.range ~= 'empty' then
disable('range','ammo')
elseif player.equipment.left_ring == "Warp Ring" or player.equipment.left_ring == "Capacity Ring" or player.equipment.right_ring == "Warp Ring" or player.equipment.right_ring == "Capacity Ring" then
disable('ring1','ring2')
elseif player.equipment.back == "Mecisto. Mantle" or player.equipment.back == "Aptitude Mantle +1" or player.equipment.back == "Aptitude Mantle" then
disable('back')
else
enable('range','ammo','ring1','ring2','back')
end
end
function refine_waltz(spell,action)
if spell.type ~= 'Waltz' then
return
end
if spell.name == "Healing Waltz" or spell.name == "Divine Waltz" or spell.name == "Divine Waltz II" then
return
end
local newWaltz = spell.english
local waltzID
local missingHP
if spell.target.type == "SELF" then
missingHP = player.max_hp - player.hp
elseif spell.target.isallymember then
local target = find_player_in_alliance(spell.target.name)
local est_max_hp = target.hp / (target.hpp/100)
missingHP = math.floor(est_max_hp - target.hp)
end
if missingHP ~= nil then
if player.sub_job == 'DNC' then
if missingHP < 40 and spell.target.name == player.name then
add_to_chat(123,'Full HP!')
cancel_spell()
return
elseif missingHP < 150 then
newWaltz = 'Curing Waltz'
waltzID = 190
elseif missingHP < 300 then
newWaltz = 'Curing Waltz II'
waltzID = 191
else
newWaltz = 'Curing Waltz III'
waltzID = 192
end
else
return
end
end
local waltzTPCost = {['Curing Waltz'] = 20, ['Curing Waltz II'] = 35, ['Curing Waltz III'] = 50}
local tpCost = waltzTPCost[newWaltz]
local downgrade
if player.tp < tpCost and not buffactive.trance then
if player.tp < 20 then
add_to_chat(123, 'Insufficient TP ['..tostring(player.tp)..']. Cancelling.')
cancel_spell()
return
elseif player.tp < 35 then
newWaltz = 'Curing Waltz'
elseif player.tp < 50 then
newWaltz = 'Curing Waltz II'
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(158, downgrade)
end
cancel_spell()
return
end
if missingHP > 0 then
add_to_chat(158,'Trying to cure '..tostring(missingHP)..' HP using '..newWaltz..'.')
end
end
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
Try this for aftercast
Code
function aftercast(spell,action)
if not spell.interrupted then
if spell.type == "WeaponSkill" then
send_command('wait 0.2;gs c TP')
end
end
status_change(player.status)
end
Also, I'm not sure what you mean by not reading haste buffs. Are you saying you have sources of haste on, but it won't equip certain sets as you expect it to? If so, I need to know what your accuracy mode is set to, what haste buffs you have on, what set you expect it to be equipping, and what gear you are actually equipping.
Hmm tried that fix and no good. Still frozen in set for whatever action was used last. Currently spamming Tenzens and have Haste/Marchx2 but the issue seems bigger, acc toggles are not currently doing anything either. Should be equipping Maxhaste but is only equipping normal tp set.
edit- Acc toggle works fine until the appropriate buffs for maxhaste are applied (haste/marchx2), Normal TP and Midhaste seem to be working correctly. Geo Haste is triggering Maxhaste on its own even though rule is set up for geo haste + haste spell, and Marchx2/haste is causing the Acc array to not function along with aftercast to not work.
It is a problem with order of operations. Replace 532-540:
Code
if ((buffactive.Haste and buffactive.March == 2) or (buffactive.Embrava and (buffactive.March == 2 or (buffactive.March and buffactive.Haste))) or (buffactive[580] and (buffactive.March or buffactive.Haste or buffactive.Embrava))) and equipSet["MaxHaste"] then
equipSet = equipSet["MaxHaste"]
end
if ((buffactive.March == 1 and buffactive.Haste and buffactive["Haste Samba"]) or buffactive.March == 2 or buffactive[580]) and equipSet["MidHaste"] then
equipSet = equipSet["MidHaste"]
end
if (buffactive.Embrava and (buffactive.March or buffactive.Haste)) and equipSet["EmbravaHaste"] then
equipSet = equipSet["EmbravaHaste"]
end
New Ambuscade items give Error on coding :
//addons/GearSwap/equip_processing lua:268: attempt to index field "?" (a nil value)
Code
name = res.items[items[to_bag_api(res.bags[cur_item.bag_id].english)][cur_item.slot].id][language]
(Resources)
Items.lua
There is no such thing as Jhakri Set on it or +1 for that matter.
Would be able to update it if I knew the Japanese of it.
Well, up to the other guys to do that part :D
Jhakri was already added to resources over two days ago, so I'm guessing your launcher is having problems updating. You can find and download the latest version of resource files manually from Windower's Github.
Just looking for someone to explain this addon a bit for me. It looks like it is an alternative to Spellcast.
Is it going to be replacing Spellcast? In which ways is it better or worse. I don't know any programming but I've slowly learned more and more about spellcast and the 'language' used in gearswap is confusing to me.
It says it uses packets so it potentially could be more detectable? but does that also eliminate any lag that spellcast may encounter?
I plan on redoing my PUP xml to include pet casting sets thanks to the new addon petschool. I'm just not sure if it's worth it to just wait until gearswap gets more popular or to go ahead and do it in spellcast.
If anyone could give me more info I'd greatly appreciate it.