|
Gearswap Support Thread
Phoenix.Keido
サーバ: Phoenix
Game: FFXI
Posts: 122
By Phoenix.Keido 2016-06-18 12:11:08
Ok different approach is all. I am totally stealing your SCH functions though. :P
[+]
サーバ: Fenrir
Game: FFXI
Posts: 183
By Fenrir.Brimstonefox 2016-06-18 16:48:14
Just FYI I think I got the stuff working at the top of the previous page.
Short answer put schedule in aftercast like flippant suggested, (I just had to fiddle with the delay since aftercast delay for ws is longer). Then rather than you if/elseif I was able to use if/return (to quit the function early) like Selindrille suggested.
Long answer:
Code
function job_post_aftercast(spell, action, spellMap, eventArgs)
-- add_to_chat(7,'post aftercast '..spell.name)
if spell.type == 'WeaponSkill' then
delay = 4
else
delay = 1
end
if player.sub_job == 'SAM' then
handle_sam_ja:schedule(delay)
end
if player.sub_job == 'WAR' then
handle_war_ja:schedule(delay)
end
end
function handle_sam_ja()
if not areas.Cities:contains(world.area) and not (buffactive.Sneak or buffactive.Invisible) then
local abil_recasts = windower.ffxi.get_ability_recasts()
if state.Stance.value == 'Offensive' then
if not buffactive.Hasso and player.status == "Engaged" and abil_recasts[138] == 0 then
windower.send_command('@input /ja "Hasso" <me>')
return
end
if player.tp < 400 and abil_recasts[134] == 0 then
windower.send_command('@input /ja "Meditate" <me>')
return
end
if player.tp > 2000 and abil_recasts[140] == 0 and player.status == "Engaged" then
windower.send_command('@input /ja "Sekkanoki" <me>')
return
end
if not buffactive.ThirdEye and abil_recasts[133] == 0 and player.status == "Engaged" then
windower.send_command('@input /ja "Third Eye" <me>')
return
end
end
if state.Stance.value == 'Defensive' then
if not buffactive.Seigan and abil_recasts[139] == 0 then
windower.send_command('@input /ja "Seigan" <me>')
return
end
if not buffactive.ThirdEye and abil_recasts[133] == 0 then
windower.send_command('@input /ja "Third Eye" <me>')
return
end
end
end
end
[+]
Phoenix.Keido
サーバ: Phoenix
Game: FFXI
Posts: 122
By Phoenix.Keido 2016-06-19 15:38:27
Next question! Bind to cycle through weapons in every set? Is this possible? This is what I have so far. I looked for examples for "Cycle Weapons" and "Gearswap weapon toggle" I came up dry. It sorta works as I can cycle through the weapons but it doesn't update on my character unless I rest or cast or do an action.
Code state.MainWeapon = M{['description']='Staff', 'Lathi_A', 'Lathi_D', 'Grioavolr', 'Boonwell'}
Code send_command('bind ^f gs c cycle MainWeapon') Code ----------------------------------------------------------------
-- Select Main Weapon for all sets
----------------------------------------------------------------
main_weapon()
Code ----------------------------------------------------------------
-- Weapons
----------------------------------------------------------------
gear.Grioavolr = {name="Grioavolr", augments={stuff}}
gear.Lathi_A = {name="Lathi", augments={stuff}}
gear.Lathi_D = {name="Lathi", augments={stuff}}
gear.Boonwell = {main="Boonwell Staff"}
gear.MainWeapon = gear.Lathi_A
Code function job_update(cmdParams, eventArgs)
main_weapon()
end
Code ----------------------------------------------------------------------------
-- Cycle between different Main Weapons to suit situation
----------------------------------------------------------------------------
function main_weapon()
if state.MainWeapon.value == 'Lathi_A' then
gear.MainWeapon.name = gear.Lathi_A
end
if state.MainWeapon.value == 'Lathi_D' then
gear.MainWeapon.name = gear.Lathi_D
end
if state.MainWeapon.value == 'Grioavolr' then
gear.MainWeapon.name = gear.Grioavolr
end
if state.MainWeapon.value == 'Boonwell' then
gear.MainWeapon.name = gear.Boonwell
end
end
Ragnarok.Flippant
サーバ: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2016-06-19 22:21:15
You would need to make sure that main_weapon() is called when you use the gs command, but I think since you're using Mote's structure, it should already handle that. I was too tired writing this and jumbled up function names twofold. What Selindrile says is correct, you need to make sure handle_equipping_gear() is called when you use the GS command, which you could do from job_update(), which Mote will handle when you use the gs command.
But I'm skeptical about any of that working as intended. First, your Boonwell is using 'main' as the index instead of 'name.' Second, you're setting the 'name' index of gear.MainWeapon equal to a table. Third, you're using a variable that's pointing to another table in memory, so you're actually changing the value of gear.Lathi_A.name each time you go through main_weapon(). In fact, you're going to end up with an inception of tables if you don't change the value.
Your table would look like each of these upon load, first call, and second call:
{name="Lathi", augments={stuff}}
{name={name="Lathi", augments={stuff}}, augments={stuff}}
{name={name={name={name="Lathi", augments={stuff}}, augments={stuff}}, augments={stuff}}, augments={stuff}}
You need to make sure that gear.MainWeapon is its own table, which can have the same values as your current Lathi_A table.
Code gear.Grioavolr = {name="Grioavolr", augments={stuff}}
gear.Lathi_A = {name="Lathi", augments={stuff}}
gear.Lathi_D = {name="Lathi", augments={stuff}}
gear.Boonwell = {name="Boonwell Staff",augments=nil}
gear.MainWeapon = {name="Lathi",augments={stuff}}
Then you need to set MainWeapon.name and MainWeapon.augments to point to the associating values. You cannot just point to the table, because the 'main' in your sets is pointing to gear.MainWeapon's table in memory, not the actual variable.
Code function main_weapon()
if gear[state.MainWeapon.value] then
gear.MainWeapon.name = gear[state.MainWeapon.value].name
gear.MainWeapon.augments = gear[state.MainWeapon.value].augments
end
end
By Selindrile 2016-06-20 05:19:01
I'm curious as to why'd you'd need to call a weapon change with a function and not just specify the appropriate weapon in the appropriate set?
That said, if you want the function you wrote to change your weapon to the appropriate one just add this to the function:
handle_equipping_gear(player.status)
Phoenix.Keido
サーバ: Phoenix
Game: FFXI
Posts: 122
By Phoenix.Keido 2016-06-20 05:43:05
I tried incorporating both suggestions in to a function like so
Code ----------------------------------------------------------------------------
-- Cycle between different Main Weapons to suit situation
----------------------------------------------------------------------------
function main_weapon()
if gear[state.MainWeapon.value] then
gear.MainWeapon.name = gear[state.MainWeapon.value].name
gear.MainWeapon.augments = gear[state.MainWeapon.value].augments
handle_equipping_gear(player.status)
end
end
I corrected the above variables.
Code ----------------------------------------------------------------
-- Cycle Weapons in any set
----------------------------------------------------------------
state.MainWeapon = M{['description']='Staff', 'Lathi_A', 'Boonwell'}
Code ----------------------------------------------------------------
-- Weapons
----------------------------------------------------------------
gear.Lathi_A = {name="Lathi", augments={'MP+80','INT+20','"Mag.Atk.Bns."+20',}}
gear.Boonwell = {name="Boonwell Staff",augments=nil}
gear.MainWeapon = {name="Lathi", augments={'MP+80','INT+20','"Mag.Atk.Bns."+20',}}
Ragnarok.Flippant
サーバ: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2016-06-20 06:09:32
Selindrile is right to bring up a question of practicality. I do understand why you wouldn't want to explicitly assign weapons to various sets, since you wouldn't want to lose TP, and because you may want to change just your weapon at any time. But there's plenty of other, simpler ways you could handle it. The easiest (aside from just manually equipping, which I prefer) is to just use the equip function.
Code function main_weapon()
if gear[state.MainWeapon.value] then equip(gear[state.MainWeapon.value]) end
end
And just get rid of the MainWeapon variable altogether.
There'd be no reason to try to handle it like Mote handles obi or NIN movement speed since this would apply to all sets.
By Selindrile 2016-06-20 08:17:36
I mean, the way Mote handles it by default is that you can simply hit F9 to lock your weapons (if your offense mode isn't none on a mage, it wont' swap weapons), or you could simply put an exception to disallow weapon swapping if TP is above a certain number, or if a certain mode is active and tp is over a certain number.... I'm just not seeing why this is practical at all.
Phoenix.Keido
サーバ: Phoenix
Game: FFXI
Posts: 122
By Phoenix.Keido 2016-06-20 10:02:38
Its really not practical. I think we can file this in the bin of bad ideas. Thank you for trying to help though.
Phoenix.Tiburon
サーバ: Phoenix
Game: FFXI
Posts: 43
By Phoenix.Tiburon 2016-06-20 10:21:47
Ragnarok.Flippant said: »There'd be no reason to try to handle it like Mote handles obi or NIN movement speed since this would apply to all sets. The purpose is to apply the variable to -most- sets, while still being able to specify certain weapons for certain sets. (Death, Resting, Stun, Helixes, etc)
Also trying to enable quick access to significant amounts of MACC without going into a full-on resist set. Think Reisenjima T1 + T2 vs T3 and Helms, Ru'Aun T1-3's vs AA's, Kirin, WoC.
サーバ: Fenrir
Game: FFXI
Posts: 183
By Fenrir.Brimstonefox 2016-06-20 13:11:16
I can post links if you're interested but I have a version of Mote's stuff which expects you to put your weapons in your sets (and can be toggled via hot keys)
It disables main/sub/ranged if tp > some threshold (I think i set to 1000 but easy to change, might have to be engaged too)
Additionally I have a holdtp toggle (on for melee, off for mages by default) so if I don't want my weapon to change I just turn it on/off.
By Selindrile 2016-06-20 14:23:48
That's what resist modes are -for-? you can go up as many tiers as you like.... why make it just based around the staff?
Carbuncle.Doryll
サーバ: Carbuncle
Game: FFXI
By Carbuncle.Doryll 2016-06-20 15:49:29
Hello,
Is someone knows a gearswap rules to equip elementary obi during day/weather for the elementals weaponskill ?
Thank you
By Selindrile 2016-06-20 16:04:58
Code sets.ElementalObi = {waist="Hachirin-no-Obi"}
if spell.skill == 'Elemental Magic' and default_spell_map ~= 'ElementalEnfeeble' and spell.english ~= 'Impact' then
if spell.element == world.weather_element or spell.element == world.day_element then
equip(sets.ElementalObi)
end
end
Carbuncle.Doryll
サーバ: Carbuncle
Game: FFXI
By Carbuncle.Doryll 2016-06-20 16:59:25
Thank you Selindrile,
But i think what you wrote is only for spells, not for weaponskill
(i tested Vidohunir(dark elem WS) during dark weather and it doesn't switch my obi)
Phoenix.Keido
サーバ: Phoenix
Game: FFXI
Posts: 122
By Phoenix.Keido 2016-06-20 17:16:38
Code sets.ElementalObi = {waist="Hachirin-no-Obi"}
if spell.type == "WeaponSkill" then
if spell.element == world.weather_element or spell.element == world.day_element then
equip(sets.ElementalObi)
end
end
Try that.
[+]
Phoenix.Keido
サーバ: Phoenix
Game: FFXI
Posts: 122
By Phoenix.Keido 2016-06-20 17:55:12
What would be the best way to write a toggle that would equip a set and then immediately un-equip it and put you back in whatever set you were in before the toggle was pushed?
Sorcerers Ring activation. I have a clunky way of doing it through the idle modes but is there a better way?
Carbuncle.Doryll
サーバ: Carbuncle
Game: FFXI
By Carbuncle.Doryll 2016-06-21 04:24:37
Code sets.ElementalObi = {waist="Hachirin-no-Obi"}
if spell.type == "WeaponSkill" then
if spell.element == world.weather_element or spell.element == world.day_element then
equip(sets.ElementalObi)
end
end
Try that.
Thank you that's ok !
[+]
By Selindrile 2016-06-21 06:29:49
What would be the best way to write a toggle that would equip a set and then immediately un-equip it and put you back in whatever set you were in before the toggle was pushed?
Sorcerers Ring activation. I have a clunky way of doing it through the idle modes but is there a better way?
Once again it would probably be better to automate sorc ring in post_midcast, nested into your other checks, but the line itself simply:
Code sets.SorcRing = {ring2="Sorcerer's Ring"}
if player.hpp < 75 then
equip(sets.SorcRing)
end
Just make sure you get your replacements done in least important > most important, like put archon ring last in these replacements so it's the one that gets equipped in the case of dark magic, as it's the most important peice.
Though I just thought about it, this doesn't take into account the fact that Sorcerer's Ring Does not take gear that "Converts HP to MP", Max HP Boost or Max HP Down into account... but does take HP+ into account... so I'm not quite sure how to account for that, actually.
サーバ: Siren
Game: FFXI
Posts: 101
By Siren.Bloodlusty 2016-06-22 13:58:17
Hi
I am having some issues with equipment during magic casting. In particular I wish to equip the pavor gauntlets and the Chuparrosa mantle for my absorbs. And the Fallen finger gauntlets+1 paired with my Niht mantle for my drains.
I have kept the lua to simple sets for now. I will update precast6 sets etc later when this works. Can anyone show me my errors please
Code sets.Precast = {}
-- Fastcast Set --
sets.Precast.FastCast = {
ammo="Seeth. Bomblet +1",
head="Pixie Hairpin +1",
body={ name="Found. Breastplate", augments={'Accuracy+10','Attack+9','"Mag.Atk.Bns."+9',}},
hands={ name="Fall. Fin. Gaunt. +1", augments={'Enhances "Diabolic Eye" effect',}},
legs="Heath. Flanchard +1",
feet={ name="Odyssean Greaves", augments={'Mag. Acc.+14 "Mag.Atk.Bns."+14','Weapon Skill Acc.+14','AGI+2','Mag. Acc.+15',}},
neck="Dark Torque",
waist="Casso Sash",
left_ear="Dark Earring",
right_ear="Abyssal Earring",
left_ring="Evanescence Ring",
right_ring="Archon Ring",
back={ name="Niht Mantle", augments={'Attack+11','Dark magic skill +7','"Drain" and "Aspir" potency +24','Weapon skill damage +2%',}}
}
-- Precast Dark Magic --
sets.Precast['Dark Magic'] = set_combine(sets.Precast.FastCast,{head="Pixie Hairpin +1"})
-- Midcast Base Set --
sets.Midcast = {
ammo="Seeth. Bomblet +1",
head="Pixie Hairpin +1",
body={ name="Found. Breastplate", augments={'Accuracy+10','Attack+9','"Mag.Atk.Bns."+9',}},
hands={ name="Fall. Fin. Gaunt. +1", augments={'Enhances "Diabolic Eye" effect',}},
legs="Heath. Flanchard +1",
feet={ name="Odyssean Greaves", augments={'Mag. Acc.+14 "Mag.Atk.Bns."+14','Weapon Skill Acc.+14','AGI+2','Mag. Acc.+15',}},
neck="Dark Torque",
waist="Casso Sash",
left_ear="Dark Earring",
right_ear="Abyssal Earring",
left_ring="Evanescence Ring",
right_ring="Archon Ring",
back={ name="Niht Mantle", augments={'Attack+11','Dark magic skill +7','"Drain" and "Aspir" potency +24','Weapon skill damage +2%',}}
}
-- Magic Haste Set --
sets.Midcast.Haste = set_combine(sets.PDT,{})
-- Dark Magic Set --
sets.Midcast['Dark Magic'] = {
ammo="Seeth. Bomblet +1",
head="Pixie Hairpin +1",
body={ name="Found. Breastplate", augments={'Accuracy+10','Attack+9','"Mag.Atk.Bns."+9',}},
hands={ name="Fall. Fin. Gaunt. +1", augments={'Enhances "Diabolic Eye" effect',}},
legs="Heath. Flanchard +1",
feet={ name="Odyssean Greaves", augments={'Mag. Acc.+14 "Mag.Atk.Bns."+14','Weapon Skill Acc.+14','AGI+2','Mag. Acc.+15',}},
neck="Dark Torque",
waist="Casso Sash",
left_ear="Dark Earring",
right_ear="Abyssal Earring",
left_ring="Evanescence Ring",
right_ring="Archon Ring",
back={ name="Niht Mantle", augments={'Attack+11','Dark magic skill +7','"Drain" and "Aspir" potency +24','Weapon skill damage +2%',}}
}
-- Stun Sets --
sets.Midcast.Stun = set_combine(sets.Midcast['Dark Magic'],{})
sets.Midcast.Stun.MidACC = set_combine(sets.Midcast.Stun,{})
sets.Midcast.Stun.HighACC = set_combine(sets.Midcast.Stun.MidACC,{})
-- Endark Set --
sets.Midcast.Endark = set_combine(sets.Midcast['Dark Magic'],{})
-- Enfeebling Magic Set --
sets.Midcast['Enfeebling Magic'] = {body="Igno. Cuirass +1"}
-- Elemental Magic Set --
sets.Midcast['Elemental Magic'] = {}
-- Drain Set --
sets.Midcast.Drain = set_combine(sets.Midcast['Dark Magic'],{
hands={ name="Fall. Fin. Gaunt. +1", augments={'Enhances "Diabolic Eye" effect',}},
back={ name="Niht Mantle", augments={'Attack+11','Dark magic skill +7','"Drain" and "Aspir" potency +24','Weapon skill damage +2%',}}
})
-- Aspir Set --
sets.Midcast.Aspir = set_combine(sets.Midcast['Dark Magic'],{
hands={ name="Fall. Fin. Gaunt. +1", augments={'Enhances "Diabolic Eye" effect',}},
back={ name="Niht Mantle", augments={'Attack+11','Dark magic skill +7','"Drain" and "Aspir" potency +24','Weapon skill damage +2%',}}
})
-- Absorb Set --
sets.Midcast.Absorb = set_combine(sets.Midcast['Dark Magic'],{
hands="Pavor Gauntlets",
feet={ name="Odyssean Greaves", augments={'Mag. Acc.+14 "Mag.Atk.Bns."+14','Weapon Skill Acc.+14','AGI+2','Mag. Acc.+15',}},
back="Chuparrosa Mantle",
})
-- Dread Spikes Set --
sets.Midcast['Dread Spikes'] = {
ammo="Seeth. Bomblet +1",
head="Pixie Hairpin +1",
body="Heath. Cuirass +1",
hands={ name="Fall. Fin. Gaunt. +1", augments={'Enhances "Diabolic Eye" effect',}},
legs="Crimson Cuisses",
feet={ name="Odyssean Greaves", augments={'Mag. Acc.+14 "Mag.Atk.Bns."+14','Weapon Skill Acc.+14','AGI+2','Mag. Acc.+15',}},
neck="Sanctity Necklace",
waist="Casso Sash",
left_ear="Dark Earring",
right_ear="Abyssal Earring",
left_ring="Evanescence Ring",
right_ring="Archon Ring",
back={ name="Niht Mantle", augments={'Attack+11','Dark magic skill +7','"Drain" and "Aspir" potency +24','Weapon skill damage +2%',}}
}
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.english == "Berserk" and buffactive.Berserk then -- Change Berserk To Aggressor If Berserk Is On --
cancel_spell()
send_command('Aggressor')
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 > 2990 then -- Cancel Meditate If TP Is Above 290 --
cancel_spell()
add_to_chat(123, spell.name .. ' Canceled: ['..player.tp..' TP]')
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 buffactive['Light Arts'] or buffactive['Addendum: White'] then
if spell.english == "Light Arts" and not buffactive['Addendum: White'] then
cancel_spell()
send_command('input /ja Addendum: White <me>')
elseif spell.english == "Manifestation" then
cancel_spell()
send_command('input /ja Accession <me>')
elseif spell.english == "Alacrity" then
cancel_spell()
send_command('input /ja Celerity <me>')
elseif spell.english == "Parsimony" then
cancel_spell()
send_command('input /ja Penury <me>')
end
elseif buffactive['Dark Arts'] or buffactive['Addendum: Black'] then
if spell.english == "Dark Arts" and not buffactive['Addendum: Black'] then
cancel_spell()
send_command('input /ja Addendum: Black <me>')
elseif spell.english == "Accession" then
cancel_spell()
send_command('input /ja Manifestation <me>')
elseif spell.english == "Celerity" then
cancel_spell()
send_command('input /ja Alacrity <me>')
elseif spell.english == "Penury" then
cancel_spell()
send_command('input /ja Parsimony <me>')
end
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 spell.english == "Catastrophe" and (world.day_element == 'Dark' or world.day_element == 'Earth') and Mekira == 'ON' then -- Equip Mekira-oto +1 On Darksday or Earthsday --
equipSet = set_combine(equipSet,{head="Mekira-oto +1"})
end
if spell.english == "Resolution" or spell.english == "Entropy" then
if spell.english == "Resolution" and (world.day_element == 'Thunder' or world.day_element == 'Wind' or world.day_element == 'Earth') and Mekira == 'ON' then -- Equip Mekira-oto +1 On Lightningday or Windsday or Earthsday --
equipSet = set_combine(equipSet,{})
elseif spell.english == "Entropy" and (world.day_element == 'Dark' or world.day_element == 'Earth' or world.day_element == 'Water') and Mekira == 'ON' then -- Equip Mekira-oto +1 On Darksday or Earthsday or Watersday --
equipSet = set_combine(equipSet,{})
end
if player.tp > 299 or buffactive.Sekkanoki then -- Equip Bale Earring When You Have 300 TP or Sekkanoki --
equipSet = set_combine(equipSet,{ear1="Bale Earring"})
end
end
equip(equipSet)
end
elseif spell.type == "JobAbility" then
if sets.JA[spell.english] then
equip(sets.JA[spell.english])
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 == "Stun" then
if buffactive.Hasso or buffactive.Seigan then -- Cancel Hasso or Seigan When You Use Stun --
cast_delay(0.2)
send_command('cancel Hasso,Seigan')
end
equip(sets.Precast.FastCast)
elseif 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
elseif sets.Precast[spell.skill] then
equip(sets.Precast[spell.skill])
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
if Twilight == 'Twilight' then
equip(sets.Twilight)
end
end
function midcast(spell,action)
equipSet = {}
if spell.type:endswith('Magic') or spell.type == 'Ninjutsu' then
equipSet = sets.Midcast
if string.find(spell.english,'Absorb') then
if buffactive["Dark Seal"] then -- Equip Aug'd Abs. Burgeonet +2 When You Have Dark Seal Up --
equipSet = set_combine(equipSet,{back="Chuparrosa Mantle",})
end
elseif string.find(spell.english,'Drain') or string.find(spell.english,'Aspir') or string.find(spell.english,'Bio') then
if world.day == "Darksday" or world.weather_element == "Dark" then -- Equip Anrin Obi On Darksday or Dark Weather --
equipSet = set_combine(equipSet,{waist="Hachirin-no-Obi"})
end
elseif spell.english == "Stoneskin" then
if buffactive.Stoneskin then
send_command('@wait 1.7;cancel stoneskin')
end
equipSet = equipSet.Stoneskin
elseif spell.english == "Sneak" then
if spell.target.name == player.name and buffactive['Sneak'] then
send_command('cancel sneak')
end
equipSet = equipSet.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
equipSet = equipSet.Haste
elseif spell.english == 'Monomi: Ichi' then
if buffactive['Sneak'] then
send_command('@wait 1.7;cancel sneak')
end
equipSet = equipSet.Haste
else
if equipSet[spell.english] then
equipSet = equipSet[spell.english]
end
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
if equipSet[spell.skill] then
equipSet = equipSet[spell.skill]
end
if equipSet[spell.type] then
equipSet = equipSet[spell.type]
end
end
elseif equipSet[spell.english] then
equipSet = equipSet[spell.english]
end
equip(equipSet)
end
Quetzalcoatl.Orestes
サーバ: Quetzalcoatl
Game: FFXI
Posts: 430
By Quetzalcoatl.Orestes 2016-06-22 15:22:37
Check your midcast function. The if/then block checks for Absorbs, but it doesn't set the proper gearset.
Something like this would allow sets.Midcast.Absorb to be equipped. Code
if string.find(spell.english,'Absorb') then
equipSet = equipSet.Absorb
elseif .....
The same goes for Drain/Aspir. Your lua has a rule to equip an Obi, but nothing to assign gearsets. (beyond sets.Midcast) You would fix that the same way.
サーバ: Siren
Game: FFXI
Posts: 101
By Siren.Bloodlusty 2016-06-23 11:57:16
I am getting an error stating
'end' expected (to close 'function' at line 1033) near 'else if'
Code function midcast(spell,action)
equipSet = {}
if spell.type:endswith('Magic') or spell.type == 'Ninjutsu' then
equipSet = sets.Midcast
if string.find(spell.english,'Absorb') then
equipSet = equipSet.Absorb
end
elseif string.find(spell.english,'Drain') or string.find(spell.english,'Aspir') or string.find(spell.english,'Bio') then
equipSet = equipSet.Drain
end
elseif spell.english == "Stoneskin" then
if buffactive.Stoneskin then
send_command('@wait 1.7;cancel stoneskin')
end
equipSet = equipSet.Stoneskin
elseif spell.english == "Sneak" then
if spell.target.name == player.name and buffactive['Sneak'] then
send_command('cancel sneak')
end
equipSet = equipSet.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
equipSet = equipSet.Haste
elseif spell.english == 'Monomi: Ichi' then
if buffactive['Sneak'] then
send_command('@wait 1.7;cancel sneak')
end
equipSet = equipSet.Haste
else
if equipSet[spell.english] then
equipSet = equipSet[spell.english]
end
if equipSet[AccArray[AccIndex]] then
equipSet = equipSet[AccArray[AccIndex]]
end
if equipSet[spell.skill] then
equipSet = equipSet[spell.skill]
end
if equipSet[spell.type] then
equipSet = equipSet[spell.type]
end
end
elseif equipSet[spell.english] then
equipSet = equipSet[spell.english]
end
equip(equipSet)
end
Do i need to type end twice? Please advise and explain the meaning of what it's trying to do thanks
サーバ: Siren
Game: FFXI
Posts: 101
By Siren.Bloodlusty 2016-06-23 13:23:45
Ok got it to work by removing the end in the command on line 7 and 10
Quetzalcoatl.Orestes
サーバ: Quetzalcoatl
Game: FFXI
Posts: 430
By Quetzalcoatl.Orestes 2016-06-23 13:40:30
Ok got it to work by removing the end in the command on line 7 and 10
Cool, yeah that was the issue.
Here is a little pseudo-code example, to simplify what is going on in your midcast.
-- create empty gear set
equipSet
-- test if we're casting magic
if spell == 'magic' then
-- assign our default magic gear set to the empty set we created
equipSet = sets.Midcast
-- if we're casting Absorb, we point our set to a more specific gear set
equipSet = sets.Midcast.Absorb
-- if we're casting Drain or Aspir we change the set
equipSet = sets.Midcast.Drain
-- here we end the "casting magic test we did earlier
end
-- finally, we equip the set, whatever it may be.
equip(equipSet)
サーバ: Siren
Game: FFXI
Posts: 101
By Siren.Bloodlusty 2016-06-23 14:24:30
Quetzalcoatl.Orestes said: »Cool, yeah that was the issue.
Here is a little pseudo-code example, to simplify what is going on in your midcast.
-- create empty gear set
equipSet
-- test if we're casting magic
if spell == 'magic' then
-- assign our default magic gear set to the empty set we created
equipSet = sets.Midcast
-- if we're casting Absorb, we point our set to a more specific gear set
equipSet = sets.Midcast.Absorb
-- if we're casting Drain or Aspir we change the set
equipSet = sets.Midcast.Drain
-- here we end the "casting magic test we did earlier
end
-- finally, we equip the set, whatever it may be.
equip(equipSet)
Thanks man :)
By Arona 2016-06-27 10:18:20
I'm getting ready to redo my PLD script and was wondering if there was a way to set up a cure cheat rule. Preferably, I'd like it to fire off if my HP is above a certain percentage.
サーバ: Asura
Game: FFXI
Posts: 127
By Asura.Brennski 2016-06-28 02:30:30
Is there a way to detect if you have a debuff active on you from Gearswap such as Doom and if so equip sets to help with removal of this?
サーバ: Asura
Game: FFXI
Posts: 334
By Asura.Krystela 2016-06-28 05:01:03
I'm getting ready to redo my PLD script and was wondering if there was a way to set up a cure cheat rule. Preferably, I'd like it to fire off if my HP is above a certain percentage. You could using a player.hpp rule
Exemple: Code
if player.hpp >90 then
equip(sets.midcast.CureCheat)
end
That would switch to your cure cheat set if your HP is over 90%
So the whole rule would be:
Code
if string.find(spell.english, 'Cure') then
if player.hpp >90 and spell.target.type == 'Self' then
equip(sets.midcast.CureCheat)
else
equip(sets.midcast.Cure)
end
end
サーバ: Asura
Game: FFXI
Posts: 334
By Asura.Krystela 2016-06-28 05:05:35
Is there a way to detect if you have a debuff active on you from Gearswap such as Doom and if so equip sets to help with removal of this?
Using buffactive would be my guess paired with status change, altho I am not sure if doom debuff is seen as doom, I think it's still under curse, but I would assume it would work regardless.
Something like this in aftercast/status change:
Code
if buffactive['Curse'] then
equip(sets.aftercast.Doom)
status_change(player.status)
end
Do not put status_change line in the status_change fonction, only in aftercast. Having a status change category in your lua is mandatory for this to work though. It will look for constant change but if you put it aftercast only without a status change, it will only switch gears after you done an action.
PS: That rule would be slightly annoying with Yakshi because of the Curse aura, so be warned. I am just unsure if Doom debuff is seen as doom or curse. If it's wrote as doom than change the buffactive['Curse'] for buffactive['Doom'].
Ragnarok.Flippant
サーバ: Ragnarok
Game: FFXI
Posts: 660
By Ragnarok.Flippant 2016-06-28 05:57:28
The status is called doom. So buffactive.Doom or buffactive['Doom']. And calling status_change would probably overwrite the equip change unless it was already in that statuts_change function, in which case there'd be no need to check from aftercast.
But definitely should put it in buff_change function so that it doesn't rely on an action occuring to register the check (or call statuts_change from buff_change, but I can't guarantee that the buffactive table is updated at the time in the procedure). Code function buff_change(buff,gain,bufftable)
if buff:lower()=="doom" and gain then
--equip gear
end
end
[+]
Just looking for someone to explain this addon a bit for me. It looks like it is an alternative to Spellcast.
Is it going to be replacing Spellcast? In which ways is it better or worse. I don't know any programming but I've slowly learned more and more about spellcast and the 'language' used in gearswap is confusing to me.
It says it uses packets so it potentially could be more detectable? but does that also eliminate any lag that spellcast may encounter?
I plan on redoing my PUP xml to include pet casting sets thanks to the new addon petschool. I'm just not sure if it's worth it to just wait until gearswap gets more popular or to go ahead and do it in spellcast.
If anyone could give me more info I'd greatly appreciate it.
|
|