Gearswap Support Thread

Langues: JP EN DE FR
users online
Forum » Windower » Support » Gearswap Support Thread
Gearswap Support Thread
First Page 2 3 ... 8 9 10 ... 182 183 184
 Fenrir.Nitenichi
Offline
Serveur: Fenrir
Game: FFXI
user: camaroz
Posts: 39
By Fenrir.Nitenichi 2014-05-15 21:30:44
Link | Citer | R
 
Fenrir.Motenten said: »
Quote:
Now is gearswap that advanced that it doesnt need accurate spelling or will I need to look through the entire file for misspells? As seen above Meikyou Shisui should be Meikyo Shisui. Thanks for any input!

That's a misspelling on my part, due to how I expect that sort of word to be romanized in English. Forgot to double-check in the game. I've fixed it in my files, and will push it to the repository soonish.

Is extremely low priority you do so much for everyone, I will recheck the file. Was honestly wondering if it was to the point where it just assumed you meant this and used ability etc. Anyhow thanks a ton for all you do
 Cerberus.Darkvlade
Offline
Serveur: Cerberus
Game: FFXI
user: Darkvlade
Posts: 202
By Cerberus.Darkvlade 2014-05-15 21:37:06
Link | Citer | R
 
Hello, new to the gearswap addon, never used spellcast before but I've been reading all the info posted, I play on PC but use an adapter for a ps2 controller and was wondering if I were to use gearswap what will be an example to input in the macro books for the game if it's possible before I commit to using it, it seems easy and Would like to give it a try, thanks in advance for your responses.
 Quetzalcoatl.Crystalchan
Leonardo da Clippi
Offline
Serveur: Quetzalcoatl
Game: FFXI
Posts: 1184
By Quetzalcoatl.Crystalchan 2014-05-15 21:58:08
Link | Citer | R
 
Quetzalcoatl.Crystalchan said: »
I've been trying to convert from spellcast to gearswap but I'm having a big problem with translating a section. I'm pretty sure I'm making this way too complicated and no matter what I've tried to "fix" it, just seems to make it worse. :\

Really long code:
My section of spellcast I'm trying to translate properly:
Also, I'm not sure if it matters where I put the code, so if you want to look at the full Gearswap file:
WHM Gearswap Taken from Kinematics

Thanks for your time, sorry for all the questions and most likely horrible and dumb mistakes I did to Gearswap lol
Sorry, I deleted this post a bit after I made it because I got pretty bummed out and just went back to spellcast. The SC2Lua thing is broken or something at the moment, I was hoping that would give me a little insight without bothering you guys. :\
[+]
 Fenrir.Moldtech
Offline
Serveur: Fenrir
Game: FFXI
user: Moldtech
Posts: 574
By Fenrir.Moldtech 2014-05-15 22:08:41
Link | Citer | R
 
Quote:
5 files you absolutely need being Mote-Globals, Mote-Include, Mote-Mappings, Mote-SelfCommands, Mote-Utility

These are needed for gearswap to even work or just for his gearswap files to work?
 Leviathan.Arcon
VIP
Offline
Serveur: Leviathan
Game: FFXI
user: Zaphor
Posts: 666
By Leviathan.Arcon 2014-05-15 22:57:58
Link | Citer | R
 
Fenrir.Moldtech said: »
Quote:
5 files you absolutely need being Mote-Globals, Mote-Include, Mote-Mappings, Mote-SelfCommands, Mote-Utility

These are needed for gearswap to even work or just for his gearswap files to work?

Just for his files.
 Phoenix.Craptaculous
Offline
Serveur: Phoenix
Game: FFXI
Posts: 57
By Phoenix.Craptaculous 2014-05-15 23:06:13
Link | Citer | R
 
I want to have a set called set.WS equipped when a WeaponSkill is used, I put the following in:
Code
function precast(spell)
	if spell.type=="WeaponSkill" then
        equip(sets.WS)
	end
end


But I am noticing that it is too quick and ends up WSing before it is registered that the gear changed.

Is there a way to insert a <wait X> into that so that it puts the gear on, then waits X-seconds (most likely 1 second) and then WS's?

Thanks.
 Fenrir.Motenten
VIP
Offline
Serveur: Fenrir
Game: FFXI
user: Motenten
Posts: 764
By Fenrir.Motenten 2014-05-15 23:17:44
Link | Citer | R
 
Phoenix.Craptaculous said: »
I want to have a set called set.WS equipped when a WeaponSkill is used, I put the following in:
Code
function precast(spell)
	if spell.type=="WeaponSkill" then
        equip(sets.WS)
	end
end


But I am noticing that it is too quick and ends up WSing before it is registered that the gear changed.

Is there a way to insert a <wait X> into that so that it puts the gear on, then waits X-seconds (most likely 1 second) and then WS's?

Thanks.

How are you determining that it's weaponskilling "before it registered that the gear changed"? Have you tested actual weaponskill results, or is this just you eyeballing your equipment screen?

All testing that's been done on this has shown that all gear fully registers with the game, regardless of how quick the action is.
 Fenrir.Motenten
VIP
Offline
Serveur: Fenrir
Game: FFXI
user: Motenten
Posts: 764
By Fenrir.Motenten 2014-05-15 23:25:12
Link | Citer | R
 
@Crystalchan:

Since you're using my files, you will -never- implement direct event-handling functions (precast, midcast, aftercast, etc) in the job file. The job file always uses job_* versions of those functions, since the main include intercepts the 'real' version.

So for all your precast stuff, it should be in the job_precast() function, not the precast() function. Creating a precast() function in your job file will mess up how the entire include structure works.

Your pastebin'd file included job_precast() already (as it's part of the default repository version), so I'm guessing the precast() functions you created were a result of an attempt to convert the xml with the auto-handler? Maybe? Or possibly just various tries at manually converting; not sure.

For handling auto-correcting the cure spells used, I'd suggest you look at the refine_waltz() function in Mote-Utility, as it does basically the same thing for waltzes. I would also suggest that you write your function to handle cures in the same way, and not put it directly in your whm job_precast(); just call the function from there.
 Odin.Jassik
VIP
Offline
Serveur: Odin
Game: FFXI
user: Jassik
Posts: 9534
By Odin.Jassik 2014-05-15 23:26:16
Link | Citer | R
 
Phoenix.Craptaculous said: »
I want to have a set called set.WS equipped when a WeaponSkill is used, I put the following in:
Code
function precast(spell)
	if spell.type=="WeaponSkill" then
        equip(sets.WS)
	end
end


But I am noticing that it is too quick and ends up WSing before it is registered that the gear changed.

Is there a way to insert a <wait X> into that so that it puts the gear on, then waits X-seconds (most likely 1 second) and then WS's?

Thanks.

waits are unnecessary with Gearswap. Spellcast needed waits because it input commands into the game, Gearswap puts the gear changes directly into the outgoing packets, effectively bypassing the game. So it controls what order the information goes out, there isn't any latency that needs to be offset.
 Phoenix.Craptaculous
Offline
Serveur: Phoenix
Game: FFXI
Posts: 57
By Phoenix.Craptaculous 2014-05-15 23:37:33
Link | Citer | R
 
Odin.Jassik said: »
Phoenix.Craptaculous said: »
I want to have a set called set.WS equipped when a WeaponSkill is used, I put the following in:
Code
function precast(spell)
	if spell.type=="WeaponSkill" then
        equip(sets.WS)
	end
end


But I am noticing that it is too quick and ends up WSing before it is registered that the gear changed.

Is there a way to insert a <wait X> into that so that it puts the gear on, then waits X-seconds (most likely 1 second) and then WS's?

Thanks.
waits are unnecessary with Gearswap. Spellcast needed waits because it input commands into the game, Gearswap puts the gear changes directly into the outgoing packets, effectively bypassing the game. So it controls what order the information goes out, there isn't any latency that needs to be offset.


if I WS with that if statement, I WS for low amount.

But, if I put the set on via "/console gs equip sets.WS" and wait a 1 second, I WS for a lot more.

It's WSing before the client can catch up with my ridiculous lag
 Quetzalcoatl.Glecent
Offline
Serveur: Quetzalcoatl
Game: FFXI
user: Glecent
Posts: 86
By Quetzalcoatl.Glecent 2014-05-16 00:20:02
Link | Citer | R
 
Cerberus.Darkvlade said: »
Hello, new to the gearswap addon, never used spellcast before but I've been reading all the info posted, I play on PC but use an adapter for a ps2 controller and was wondering if I were to use gearswap what will be an example to input in the macro books for the game if it's possible before I commit to using it, it seems easy and Would like to give it a try, thanks in advance for your responses.

It automatically makes the swaps when you use the ability/spell/WS.
So,

/ws "Victory Smite" <t>

That's all it takes to use Victory Smite and do all the gear swaps. You can also WS and cast etc through the menus and it will make the swaps.
 Fenrir.Motenten
VIP
Offline
Serveur: Fenrir
Game: FFXI
user: Motenten
Posts: 764
By Fenrir.Motenten 2014-05-16 00:24:23
Link | Citer | R
 
Phoenix.Craptaculous said: »
if I WS with that if statement, I WS for low amount.

But, if I put the set on via "/console gs equip sets.WS" and wait a 1 second, I WS for a lot more.

It's WSing before the client can catch up with my ridiculous lag


Are you using magical weaponskills to test, so that you're guaranteed to get fixed damage results based on your gear?
 Quetzalcoatl.Crystalchan
Leonardo da Clippi
Offline
Serveur: Quetzalcoatl
Game: FFXI
Posts: 1184
By Quetzalcoatl.Crystalchan 2014-05-16 00:26:11
Link | Citer | R
 
Fenrir.Motenten said: »
@Crystalchan:
Thank you for the reply, I did try to copy what you did in the utility but ended up getting confused on how Light Arts and Penury would play into that and I guess I just made a big jumbled mess. Every time I try something different, I get riddled with errors, I just wish I could get one piece right! I honestly have no idea what I'm doing with gearswap so I'll just have to live without a little feature.

Also just wondering how you would equip Fucho-no-obi when MP<50% in gearswap? I figured it out in spellcast but I have no idea about gearswap. ._. I tried searching for it, but it seems like people just put it in their idle/resting sets.

Thank you and gearswap is an amazing add-on that I've been using for quite some time on RNG, I just wish I could figure it out faster. ^^v
 Phoenix.Craptaculous
Offline
Serveur: Phoenix
Game: FFXI
Posts: 57
By Phoenix.Craptaculous 2014-05-16 01:10:34
Link | Citer | R
 
Fenrir.Motenten said: »
Phoenix.Craptaculous said: »
if I WS with that if statement, I WS for low amount.

But, if I put the set on via "/console gs equip sets.WS" and wait a 1 second, I WS for a lot more.

It's WSing before the client can catch up with my ridiculous lag


Are you using magical weaponskills to test, so that you're guaranteed to get fixed damage results based on your gear?

No, using quite the opposite, Victory Smite, yes I know, it can crit, DA on 1st hit, and is prone to miss a hit or more. But my WS-avg's with spellcast were consistently 4-5k on random junk in ceizak.

Due to SC being no longer repaired/supported, I've began testing on GS w/ the above 'if' statement wsavg was a lot less, more around 2-3k. Same gear setup as it was in my SC gear set, same basic if statement in GS vs SC. Less WsAvg.

The only fix I have is to not use the 'if' statement, and just put the set on via /console gs equip set.WS, wait a second for lag so that the game cancatch up and realize I changed gear, then WS, and my expected WS-Avg returns and is as consistent as it was w/ SC.

I am using Scoreboard for stat-WsAvg to determine and confirm #'s as I see them go by.
 Fenrir.Motenten
VIP
Offline
Serveur: Fenrir
Game: FFXI
user: Motenten
Posts: 764
By Fenrir.Motenten 2014-05-16 04:42:41
Link | Citer | R
 
Quetzalcoatl.Crystalchan said: »
Also just wondering how you would equip Fucho-no-obi when MP<50% in gearswap? I figured it out in spellcast but I have no idea about gearswap. ._. I tried searching for it, but it seems like people just put it in their idle/resting sets.

If you're using one of mine, add it in the customize_idle_set() function if the conditions are met. Something like:
Code
function customize_idle_set(idleSet)
    if player.mpp < 50 then
        idleSet = set_combine(idleSet, {waist="Fucho-no-obi"})
    end
    return idleSet
end
[+]
 Fenrir.Motenten
VIP
Offline
Serveur: Fenrir
Game: FFXI
user: Motenten
Posts: 764
By Fenrir.Motenten 2014-05-16 04:45:24
Link | Citer | R
 
Phoenix.Craptaculous said: »
No, using quite the opposite, Victory Smite

Test again using elemental weaponskills. On mnk you can use club or staff.
 Phoenix.Craptaculous
Offline
Serveur: Phoenix
Game: FFXI
Posts: 57
By Phoenix.Craptaculous 2014-05-17 09:38:26
Link | Citer | R
 
is there a way to do the following in GS or not:
Code
	<if spell=="Victory Smite>"
         <cancelspell/>
         <equip when="precast|midcast" set="WS" />
         <command>wait 0.5; input /raw "Victory Smite" <t> </command>
        </if>

(note the <t> is the HEX equivalent in SC actually: &_lt;t&gt_; <minus the "_"s>)

I'm sure GS works perfectly for people with good internet, but my internet has a 900ms ping to Japan. My Lag is awful, I get better numbers when I put 1/2 second waits in commands, always have, even w/ vanilla macros, I prefer to keep that 1/2 second delay between equip and action made.

I'm definitely not the best geared person in the world, but I’ve lost about 20-30% dmg avg since I've changed to GS (comparing #'s on a few tojils runs pre/post the Game update on Wednesday). And that's really bad. My gear setup has not changed, all I've done is made a super simple, GS equivalent of the SC I made (with out the wait since I don't know if there even is one).

The if statement I made for GS is working as it should be, but it's way too fast for my awful internet. I just want to be able to accommodate for that. If I can't, then no big deal, I'll just put it on manually with the /console gs equip command prior to WSing or use that in a vanilla macro with a <wait .5> after it.
 Lakshmi.Byrth
VIP
Offline
Serveur: Lakshmi
Game: FFXI
user: Byrthnoth
Posts: 6184
By Lakshmi.Byrth 2014-05-17 11:31:04
Link | Citer | R
 
See, here's how it works:
1) As far as we can tell, the server respects the order of chunks in a UDP packet.
2) GearSwap injects equip chunks (precast), and then injects the action command chunk (aka using victory smite), and then inject equip chunks (midcast). These chunks probably go out in the same UDP packet essentially all the time.
3) If that packet arrives at the server, then you will have equipped your gear in the right order because all of the chunks are in the same UDP packet.
4) After you use victory smite and your client sees your damage, it sends out more equip chunks (aftercast).

There's basically no way that adding a 0.5 second delay would help you.
 Asura.Aikchan
Offline
Serveur: Asura
Game: FFXI
user: Aikawa
Posts: 373
By Asura.Aikchan 2014-05-17 12:04:19
Link | Citer | R
 
Phoenix.Craptaculous said: »
is there a way to do the following in GS or not:
Code
	<if spell=="Victory Smite>"
         <cancelspell/>
         <equip when="precast|midcast" set="WS" />
         <command>wait 0.5; input /raw "Victory Smite" <t> </command>
        </if>

(note the <t> is the HEX equivalent in SC actually: &_lt;t&gt_; <minus the "_"s>)

I'm sure GS works perfectly for people with good internet, but my internet has a 900ms ping to Japan. My Lag is awful, I get better numbers when I put 1/2 second waits in commands, always have, even w/ vanilla macros, I prefer to keep that 1/2 second delay between equip and action made.

I'm definitely not the best geared person in the world, but I’ve lost about 20-30% dmg avg since I've changed to GS (comparing #'s on a few tojils runs pre/post the Game update on Wednesday). And that's really bad. My gear setup has not changed, all I've done is made a super simple, GS equivalent of the SC I made (with out the wait since I don't know if there even is one).

The if statement I made for GS is working as it should be, but it's way too fast for my awful internet. I just want to be able to accommodate for that. If I can't, then no big deal, I'll just put it on manually with the /console gs equip command prior to WSing or use that in a vanilla macro with a <wait .5> after it.

Sadly in heavy lag GS still works, and nothing better than besiege to test that.

Unless you post what you are using, can't really help, but they might be others issues not letting your gear to equip.
 Fenrir.Motenten
VIP
Offline
Serveur: Fenrir
Game: FFXI
user: Motenten
Posts: 764
By Fenrir.Motenten 2014-05-17 12:42:04
Link | Citer | R
 
Phoenix.Craptaculous said: »
is there a way to do the following in GS or not:
Code
	<if spell=="Victory Smite>"
         <cancelspell/>
         <equip when="precast|midcast" set="WS" />
         <command>wait 0.5; input /raw "Victory Smite" <t> </command>
        </if>

(note the <t> is the HEX equivalent in SC actually: &_lt;t&gt_; <minus the "_"s>)

I'm sure GS works perfectly for people with good internet, but my internet has a 900ms ping to Japan. My Lag is awful, I get better numbers when I put 1/2 second waits in commands, always have, even w/ vanilla macros, I prefer to keep that 1/2 second delay between equip and action made.

I'm definitely not the best geared person in the world, but I’ve lost about 20-30% dmg avg since I've changed to GS (comparing #'s on a few tojils runs pre/post the Game update on Wednesday). And that's really bad. My gear setup has not changed, all I've done is made a super simple, GS equivalent of the SC I made (with out the wait since I don't know if there even is one).

The if statement I made for GS is working as it should be, but it's way too fast for my awful internet. I just want to be able to accommodate for that. If I can't, then no big deal, I'll just put it on manually with the /console gs equip command prior to WSing or use that in a vanilla macro with a <wait .5> after it.


1) There is no way to do that in GearSwap. As Byrth said, your precast gear and the command (as well as the midcast gear) all go out in the same packet. The only delay you can add is the time before it sends that packet out.

2) Unless/until you're willing to do an actual verifiable test to show a problem, rather than just eyeballed values in a chaotic environment, there's no reason for anyone to make changes to GearSwap to accommodate the alleged problem.

Said test needs to show values that will not change from test run to test run. Simple procedure:

a) Equip a Warp Cudgel or other club you have handy
b) Turn off GearSwap (so no gear changes at all)
c) Equip standard TP gear
d) Use Shining Strike vs consistent level mobs (eg: mandys in Ceizak, which are all level 100). Repeat at least twice to be sure you didn't get a resist.
e) Equip gear that would change the result (eg: any MAB gear); equip as much or as little as you like, relative to the TP set
f) Repeat the Shining Strike test vs the same mobs
g) Put the MAB gear set in GearSwap, and turn GearSwap on
h) Repeat the test with GearSwap active. You should see a value that matches either the first or second results above. Also do a weaponskill test with the showswaps flag active (//gs showswaps) and verify that the precast gear being used matches what you expect.
i) Provide said results here when discussing the issue.
j) If the GearSwap-activated results match the flat TP set results rather then the expected MAB gear set results, then there is a problem. However that problem is potentially your gearswap lua file itself, so you'll need to provide that as well (either in [code] tags here, or posted on pastebin).
 Cerberus.Conagh
Offline
Serveur: Cerberus
Game: FFXI
user: onagh
Posts: 3189
By Cerberus.Conagh 2014-05-17 13:22:15
Link | Citer | R
 
Asura.Aikchan said: »
Phoenix.Craptaculous said: »
is there a way to do the following in GS or not:
Code
	<if spell=="Victory Smite>"
         <cancelspell/>
         <equip when="precast|midcast" set="WS" />
         <command>wait 0.5; input /raw "Victory Smite" <t> </command>
        </if>

(note the <t> is the HEX equivalent in SC actually: &_lt;t&gt_; <minus the "_"s>)

I'm sure GS works perfectly for people with good internet, but my internet has a 900ms ping to Japan. My Lag is awful, I get better numbers when I put 1/2 second waits in commands, always have, even w/ vanilla macros, I prefer to keep that 1/2 second delay between equip and action made.

I'm definitely not the best geared person in the world, but I’ve lost about 20-30% dmg avg since I've changed to GS (comparing #'s on a few tojils runs pre/post the Game update on Wednesday). And that's really bad. My gear setup has not changed, all I've done is made a super simple, GS equivalent of the SC I made (with out the wait since I don't know if there even is one).

The if statement I made for GS is working as it should be, but it's way too fast for my awful internet. I just want to be able to accommodate for that. If I can't, then no big deal, I'll just put it on manually with the /console gs equip command prior to WSing or use that in a vanilla macro with a <wait .5> after it.

Sadly in heavy lag GS still works, and nothing better than besiege to test that.

Unless you post what you are using, can't really help, but they might be others issues not letting your gear to equip.

I use a MAB set for Sanguine Blade, I have no MAB on my TP set or Normalk WS sets.

Sanguine deals Stupid amounts of damage with my MAB, without GS on it deals 400.

GS works perfectly fine with my shitty internet, it's something in your lua itself! Post we can help with it :)
 Phoenix.Damnit
Offline
Serveur: Phoenix
Game: FFXI
user: bignig
Posts: 38
By Phoenix.Damnit 2014-05-18 00:53:12
Link | Citer | R
 
@mote, please bear with me as I am still attempting to learn GS.
I switched over to your summoner Lua after using Byrths for a while and having issues where when my pet dies GS would freeze for about 30 seconds and block all actions. I am having a small issue with the Lua you use atm, (probably something small and simple I am looking over)
I get a console error message whenever i try to use an ability (Either BP~rage/ward or even spells) if the timers are down basically I get the error and from what I see in "Showswaps" GS pauses in the precast set. Console states~ error in the user function Self_commands.Lua:32: attempt to index global 'selfcomandmaps' (a nil Value, also i think the runtime error in flow.lua:276: accompanies the previous error.
Basically is there a way to get your Lua to act as Byrths and revert back to the "set.idle.avatar" once it reads that the ability or spell timer is not ready?
I'm really sorry for all the trouble. I'm new to using the Mote.lua instruction files
BTW the /gs c siphon and the grouped BP's controlled by GS is amazing :)
Code
-- IMPORTANT: Make sure to also get the Mote-Include.lua file (and it's supplementary files) to go with this.

-- Also, you'll need the Shortcuts addon to handle the auto-targetting of the custom pact commands.

--[[
Custom commands:
gs c petweather
Automatically casts the storm appropriate for the current avatar, if possible.
gs c siphon
Automatically run the process to: dismiss the current avatar; cast appropriate
weather; summon the appropriate spirit; Elemental Siphon; release the spirit;
and re-summon the avatar.
Will not cast weather you do not have access to.
Will not re-summon the avatar if one was not out in the first place.
Will not release the spirit if it was out before the command was issued.
gs c pact [PactType]
Attempts to use the indicated pact type for the current avatar.
cure
curaga
buffOffense
buffDefense
buffSpecial
debuff1
debuff2
sleep
nuke2
nuke4
bp70
bp75 (merits and lvl 75-80 pacts)
astralflow

--]]


-- Initialization function for this job file.
function get_sets()
-- Load and initialize the include file.
include('Mote-Include.lua')
end

-- Setup vars that are user-independent.
function job_setup()
state.Buff["Avatar's Favor"] = buffactive["Avatar's Favor"] or false

spirits = S{"LightSpirit", "DarkSpirit", "FireSpirit", "EarthSpirit", "WaterSpirit", "AirSpirit", "IceSpirit", "ThunderSpirit"}
avatars = S{"Carbuncle", "Fenrir", "Diabolos", "Ifrit", "Titan", "Leviathan", "Garuda", "Shiva", "Ramuh", "Odin", "Alexander", "Cait Sith"}

magicalRagePacts = S{
'Inferno','Earthen Fury','Tidal Wave','Aerial Blast','Diamond Dust','Judgement Bolt','Searing Light','Howling Moon','Ruinous Omen',
'Fire II','Stone II','Water II','Aero II','Blizzard II','Thunder II',
'Fire IV','Stone IV','Water IV','Aero IV','Blizzard IV','Thunder IV',
'Thunderspark','Burning Strike','Meteorite','Nether Blast','Flaming Crush',
'Meteor Strike','Heavenly Strike','Wind Blade','Geocrush','Grand Fall','Thunderstorm',
'Holy Mist','Lunar Bay','Night Terror','Level ? Holy'}


pacts = {}
pacts.cure = {['Carbuncle']='Healing Ruby'}
pacts.curaga = {['Carbuncle']='Healing Ruby II', ['Garuda']='Whispering Wind', ['Leviathan']='Spring Water'}
pacts.buffoffense = {['Carbuncle']='Glittering Ruby', ['Ifrit']='Crimson Howl', ['Garuda']='Hastega', ['Ramuh']='Rolling Thunder',
['Fenrir']='Ecliptic Growl'}
pacts.buffdefense = {['Carbuncle']='Shining Ruby', ['Shiva']='Frost Armor', ['Garuda']='Aerial Armor', ['Titan']='Earthen Ward',
['Ramuh']='Lightning Armor', ['Fenrir']='Ecliptic Howl', ['Diabolos']='Noctoshield', ['Cait Sith']='Reraise II'}
pacts.buffspecial = {['Ifrit']='Inferno Howl', ['Garuda']='Fleet Wind', ['Titan']='Earthen Armor', ['Diabolos']='Dream Shroud',
['Carbuncle']='Soothing Ruby', ['Fenrir']='Heavenward Howl', ['Cait Sith']='Raise II'}
pacts.debuff1 = {['Shiva']='Diamond Storm', ['Ramuh']='Shock Squall', ['Leviathan']='Tidal Roar', ['Fenrir']='Lunar Cry',
['Diabolos']='Pavor Nocturnus', ['Cait Sith']='Eerie Eye'}
pacts.debuff2 = {['Shiva']='Sleepga', ['Leviathan']='Slowga', ['Fenrir']='Lunar Roar', ['Diabolos']='Somnolence'}
pacts.sleep = {['Shiva']='Sleepga', ['Diabolos']='Nightmare', ['Cait Sith']='Mewing Lullaby'}
pacts.nuke2 = {['Ifrit']='Fire II', ['Shiva']='Blizzard II', ['Garuda']='Aero II', ['Titan']='Stone II',
['Ramuh']='Thunder II', ['Leviathan']='Water II'}
pacts.nuke4 = {['Ifrit']='Fire IV', ['Shiva']='Blizzard IV', ['Garuda']='Aero IV', ['Titan']='Stone IV',
['Ramuh']='Thunder IV', ['Leviathan']='Water IV'}
pacts.bp70 = {['Ifrit']='Flaming Crush', ['Shiva']='Rush', ['Garuda']='Predator Claws', ['Titan']='Mountain Buster',
['Ramuh']='Chaotic Strike', ['Leviathan']='Spinning Dive', ['Carbuncle']='Meteorite', ['Fenrir']='Eclipse Bite',
['Diabolos']='Nether Blast'}
pacts.bp75 = {['Ifrit']='Meteor Strike', ['Shiva']='Heavenly Strike', ['Garuda']='Wind Blade', ['Titan']='Geocrush',
['Ramuh']='Thunderstorm', ['Leviathan']='Grand Fall', ['Carbuncle']='Holy Mist', ['Fenrir']='Lunar Bay',
['Diabolos']='Night Terror', ['Cait Sith']='Level ? Holy'}
pacts.astralflow = {['Ifrit']='Inferno', ['Shiva']='Diamond Dust', ['Garuda']='Aerial Blast', ['Titan']='Earthen Fury',
['Ramuh']='Judgment Bolt', ['Leviathan']='Tidal Wave', ['Carbuncle']='Searing Light', ['Fenrir']='Howling Moon',
['Diabolos']='Ruinous Omen', ['Cait Sith']="Altana's Favor"}

end


-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
-- Options: Override default values
options.OffenseModes = {'Normal'}
options.DefenseModes = {'Normal'}
options.WeaponskillModes = {'Normal'}
options.CastingModes = {'Normal'}
options.IdleModes = {'Normal'}
options.RestingModes = {'Normal'}
options.PhysicalDefenseModes = {'PDT'}
options.MagicalDefenseModes = {'MDT'}

state.Defense.PhysicalMode = 'PDT'

-- Durations for wards we want to create custom timers for.
durations = {}
durations['Earthen Armor'] = 232
durations['Shining Ruby'] = 340
durations['Dream Shroud'] = 352
durations['Noctoshield'] = 352
durations['Inferno Howl'] = 232
durations['Hastega'] = 352

-- Icons to use for the timers (from plugins/icons directory)
timer_icons = {}
-- 00054 for stoneskin, or 00299 for Titan
timer_icons['Earthen Armor'] = 'spells/00299.png'
-- 00043 for protect, or 00296 for Carby
timer_icons['Shining Ruby'] = 'spells/00043.png'
-- 00304 for Diabolos
timer_icons['Dream Shroud'] = 'spells/00304.png'
-- 00106 for phalanx, or 00304 for Diabolos
timer_icons['Noctoshield'] = 'spells/00106.png'
-- 00100 for enfire, or 00298 for Ifrit
timer_icons['Inferno Howl'] = 'spells/00298.png'
-- 00358 for hastega, or 00301 for Garuda
timer_icons['Hastega'] = 'spells/00358.png'


select_default_macro_book()
end


-- Called when this job file is unloaded (eg: job change)
function file_unload()
if binds_on_unload then
binds_on_unload()
end
end


-- Define sets and vars used by this job file.
function init_gear_sets()
--------------------------------------
-- Start defining the sets
--------------------------------------

-- Precast Sets

-- Precast sets to enhance JAs
sets.precast.JA['Astral Flow'] = {head="Glyphic Horn +1"}

sets.precast.JA['Elemental Siphon'] = {main="Kirin's Pole",sub="Vox Grip",ammo="Seraphicaller",
head="Con. Horn +1",neck="Caller's Pendant",
body="Anhur Robe",hands="Glyphic Bracers +1",ring1="Evoker's Ring",ring2="Fervor Ring",
waist="Cimmerian Sash",legs="Marduk's Shalwar +1",ear1="Andoaa Earring",ear2="Smn. Earring",feet="Caller's Pgch. +2"}

sets.precast.JA['Mana Cede'] = {hands="Caller's Bracers +2"}

-- Pact delay reduction gear
sets.precast.BloodPactWard = {ammo="Seraphicaller",head="Con. Horn +1 Horn",body="Glyphic Doublet +1",legs="Glyphic Spats",hands="Glyphic Bracers +1",back="Samanisi Cape",feet="Glyph. Pigaches +1"}

sets.precast.BloodPactRage = sets.precast.BloodPactWard

-- Fast cast sets for spells

sets.precast.FC = {
head="Nahtirah Hat",ear2="Loquacious Earring",
body="Marduk's Jubbah +1",ring1="Prolix Ring",
back="Swith Cape",hands="Magavan Mitts",waist="Witful Belt",legs="Orvail Pants",neck="Orunmila's Torque",feet="Chelona Boots"}

sets.precast.FC['Enhancing Magic'] = set_combine(sets.precast.FC, {waist="Siegel Sash",head="Umuthi Hat"})

       
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {
head="Nahtirah Hat",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Vanir Cotehardie",hands="Yaoyotl Gloves",ring1="Rajas Ring",ring2="K'ayres Ring",
back="Pahtli Cape",waist="Cascade Belt",legs="Hagondes Pants",feet="Hagondes Sabots"}

-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
sets.precast.WS['Myrkr'] = {
head="Nahtirah Hat",ear1="Gifted Earring",ear2="Loquacious Earring",
body="Convoker's Doublet",hands="Caller's Bracers +2",ring1="Evoker's Ring",ring2="Sangoma Ring",
back="Pahtli Cape",waist="Hierarch Belt",legs="Nares Trews",feet="Chelona Boots +1"}


-- Midcast Sets
sets.midcast.FastRecast = {
head="Nahtirah Hat",ear2="Loquacious Earring",
body="Vanir Cotehardie",hands="Bokwus Gloves",ring1="Prolix Ring",
back="Swith Cape",waist="Witful Belt",legs="Hagondes Pants",feet="Hagondes Sabots"}

sets.midcast.Cure = {main="Tamaxchi",sub="Genbu's Shield",
head="Nahtirah Hat",ear2="Loquacious Earring",
body="Heka's Kalasiris",hands="Bokwus Gloves",ring1="Prolix Ring",ring2="Sirona's Ring",
back="Pahtli Cape",waist="Witful Belt",legs="Nabu's Shalwar",feet="Chelona Boots"}

sets.midcast.Stoneskin = {waist="Siegel Sash",head="Umuthi Hat"}

sets.midcast.Pet.BloodPactWard = {main="Kirin's Pole",sub="Vox Grip",ammo="Seraphicaller",
head="Con. Horn +1",neck="Caller's Pendant",
body="Anhur Robe",hands="Glyphic Bracers +1",ring1="Evoker's Ring",ring2="Fervor Ring",
waist="Cimmerian Sash",legs="Marduk's Shalwar +1",ear1="Andoaa Earring",ear2="Smn. Earring",feet="Mdk. Crackows +1"}

sets.midcast.Pet.PhysicalBloodPactRage = {main="Nirvana",sub="Oneiros Grip",ammo="Seraphicaller",head="Glyphic Horn +1",ear1="Esper Earring",ear2="Smn. Earring",body="Con. Doublet +1",hands="Auspex Gages",ring1="Evoker's Ring",ring2="Fervor Ring",waist="Caller's Sash",legs="Ngen Seraweels",feet="Con. Pigaches +1"}

sets.midcast.Pet.MagicalBloodPactRage = {main="Nirvana",sub="Oneiros Grip",ammo="Seraphicaller",head="Glyphic Horn +1",ear1="Esper Earring",ear2="Smn. Earring",body="Con. Doublet +1",hands="Hagondes Cuffs",ring1="Evoker's Ring",ring2="Fervor Ring",waist="Caller's Sash",legs="Ngen Seraweels",feet="Con. Pigaches +1"}

sets.midcast.Pet.Spirit = set_combine(sets.midcast.Pet.BloodPactRage, {legs="Summoner's Spats"})

-- Sets to return to when not performing an action.

-- Resting sets
sets.resting = {main="Nirvana",ammo="Seraphicaller",
head="Convoker's Horn",neck="Wiglen Gorget",ear1="Gifted Earring",ear2="Loquacious Earring",
body="Hagondes Coat",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
back="Pahtli Cape",waist="Austerity Belt",legs="Nares Trews",feet="Chelona Boots +1"}

-- Idle sets
sets.idle = {main="Nirvana",sub="Oneiros Grip",
        head="Glyphic Horn +1",neck="Caller's Pendant",ear1="Moonshade Earring",ear2="Smn. Earring",
        body="Glyphic Doublet +1",hands="Glyphic Bracers +1",ring1="Evoker's Ring",ring2="Defending Ring",
        back="Conveyance Cape",waist="Isa Belt",legs="Glyphic Spats",feet="Glyph. Pigaches +1"}

sets.idle.PDT = {main="Nirvana",sub="Oneiros Grip",ammo="Seraphicaller",
head="Con. Horn +1",neck="Caller's Pendant",ear1="Moonshade Earring",ear2="Smn. Earring",
body="Hagondes Coat",hands="Glyphic Bracers +1",ring1="Evoker's Ring",ring2="Defending Ring",
back="Conveyance Cape",waist="Isa Belt",legs="Nares Trews",feet="Con. Pigaches +1"}

-- perp costs:
-- spirits: 7
-- carby: 11 (5 with mitts)
-- fenrir: 13
-- others: 15
-- avatar's favor: -4/tick

-- -perp gear:
-- Patriarch Cane: -3
-- Glyphic Horn: -4
-- Caller's Doublet +2: -4
-- Evoker's Ring: -1
-- Convoker's Pigaches: -4
-- total: -16

sets.idle.Avatar = {main="Nirvana",sub="Oneiros Grip",ammo="Seraphicaller",
head="Con. Horn +1",neck="Caller's Pendant",ear1="Moonshade Earring",ear2="Smn. Earring",
body="Hagondes Coat",hands="Glyphic Bracers +1",ring1="Evoker's Ring",ring2="Defending Ring",
back="Conveyance Cape",waist="Isa Belt",legs="Nares Trews",feet="Con. Pigaches +1"}

sets.idle.Spirit = {main="Kirin's Pole",sub="Vox Grip",ammo="Seraphicaller",
head="Con. Horn +1",neck="Caller's Pendant",
body="Anhur Robe",hands="Glyphic Bracers +1",ring1="Evoker's Ring",ring2="Fervor Ring",
waist="Cimmerian Sash",legs="Marduk's Shalwar +1",ear1="Andoaa Earring",ear2="Smn. Earring",feet="Caller's Pgch. +2"}

sets.idle.Town = {main="Nirvana",sub="Oneiros Grip",ammo="Seraphicaller",
head="Convoker's Horn",neck="Wiglen Gorget",ear1="Gifted Earring",ear2="Loquacious Earring",
body="Hagondes Coat",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Sangoma Ring",
back="Umbra Cape",waist="Hierarch Belt",legs="Nares Trews",feet="Herald's Gaiters"}

-- Favor can trade the -4 perp of Glyphic Horn for +2 refresh of Caller's Horn (plus enhance favor).
sets.idle.Avatar.Favor = {head="Caller's Horn +2"}

sets.perp = {}
sets.perp.Day = {hands="Caller's Bracers +2"}
sets.perp.Weather = {neck="Caller's Pendant",hands="Caller's Bracers +2"}
sets.perp.Alexander = sets.midcast.Pet.BloodPactWard

-- Defense sets
sets.defense.PDT = {main=gear.Staff.PDT,
head="Hagondes Hat",neck="Wiglen Gorget",ear1="Gifted Earring",ear2="Loquacious Earring",
body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Dark Ring",ring2="Dark Ring",
back="Umbra Cape",waist="Hierarch Belt",legs="Hagondes Pants",feet="Hagondes Sabots"}

sets.defense.MDT = {
head="Hagondes Hat",neck="Twilight Torque",ear1="Gifted Earring",ear2="Loquacious Earring",
body="Vanir Cotehardie",hands="Yaoyotl Gloves",ring1="Dark Ring",ring2="Shadow Ring",
back="Umbra Cape",waist="Hierarch Belt",legs="Bokwus Slops",feet="Hagondes Sabots"}

sets.Kiting = {feet="Herald's Gaiters"}

-- Engaged sets

-- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
-- sets if more refined versions aren't defined.
-- If you create a set with both offense and defense modes, the offense mode should be first.
-- EG: sets.engaged.Dagger.Accuracy.Evasion

-- Normal melee group
sets.engaged = {ammo="Seraphicaller",
head="Zelus Tiara",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
body="Vanir Cotehardie",hands="Bokwus Gloves",ring1="Rajas Ring",ring2="K'ayres Ring",
back="Umbra Cape",waist="Goading Belt",legs="Hagondes Pants",feet="Hagondes Sabots"}
end

-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks that are called to process player actions at specific points in time.
-------------------------------------------------------------------------------------------------------------------

-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_midcast(spell, action, spellMap, eventArgs)
if spell.action_type == 'Magic' then
equip(sets.midcast.FastRecast)
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 then
if state.Buff[spell.name] ~= nil then
state.Buff[spell.name] = true
end
end
end


-- Runs when a pet initiates an action.
-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_pet_midcast(spell, action, spellMap, eventArgs)
if spirits:contains(pet.name) then
classes.CustomClass = 'Spirit'
end
end


-- Runs when pet completes an action.
function job_pet_aftercast(spell, action, spellMap, eventArgs)
if not spell.interrupted then
create_pact_timer(spell)
end
end


-------------------------------------------------------------------------------------------------------------------
-- Customization hooks for idle and melee sets, after they've been automatically constructed.
-------------------------------------------------------------------------------------------------------------------

-- Modify the default idle set after it was constructed.
function customize_idle_set(idleSet)
if pet.isvalid then
if pet.element == world.day_element then
idleSet = set_combine(idleSet, sets.perp.Day)
end
if pet.element == world.weather_element then
idleSet = set_combine(idleSet, sets.perp.Weather)
end
if sets.perp[pet.name] then
idleSet = set_combine(idleSet, sets.perp[pet.name])
end
if state.Buff["Avatar's Favor"] and avatars:contains(pet.name) then
idleSet = set_combine(idleSet, sets.idle.Avatar.Favor)
end
if pet.status == 'Engaged' then
idleSet = set_combine(idleSet, sets.idle.Avatar.Melee)
end
end

return idleSet
end


-------------------------------------------------------------------------------------------------------------------
-- General hooks for other events.
-------------------------------------------------------------------------------------------------------------------

-- Called when a player gains or loses a buff.
-- buff == buff gained or lost
-- gain == true if the buff was gained, false if it was lost.
function job_buff_change(buff, gain)
if state.Buff[buff] ~= nil then
state.Buff[buff] = gain
handle_equipping_gear(player.status)
elseif storms:contains(buff) then
handle_equipping_gear(player.status)
end
end


-- Called when the player's pet's status changes.
-- This is also called after pet_change after a pet is released. Check for pet validity.
function job_pet_status_change(newStatus, oldStatus, eventArgs)
if pet.isvalid and not midaction() and not pet_midaction() and (newStatus == 'Engaged' or oldStatus == 'Engaged') then
handle_equipping_gear(player.status, newStatus)
end
end


-- Called when a player gains or loses a pet.
-- pet == pet structure
-- gain == true if the pet was gained, false if it was lost.
function job_pet_change(petparam, gain)
classes.CustomIdleGroups:clear()
if gain then
if avatars:contains(pet.name) then
classes.CustomIdleGroups:append('Avatar')
elseif spirits:contains(pet.name) then
classes.CustomIdleGroups:append('Spirit')
end
else
select_default_macro_book()
end
end


-------------------------------------------------------------------------------------------------------------------
-- User code that supplements self-commands.
-------------------------------------------------------------------------------------------------------------------

-- Called for custom player commands.
function job_self_command(cmdParams, eventArgs)
if cmdParams[1]:lower() == 'petweather' then
handle_petweather()
eventArgs.handled = true
elseif cmdParams[1]:lower() == 'siphon' then
handle_siphoning()
eventArgs.handled = true
elseif cmdParams[1]:lower() == 'pact' then
handle_pacts(cmdParams)
eventArgs.handled = true
end
end

-- 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)
classes.CustomIdleGroups:clear()
if pet.isvalid then
if avatars:contains(pet.name) then
classes.CustomIdleGroups:append('Avatar')
elseif spirits:contains(pet.name) then
classes.CustomIdleGroups:append('Spirit')
end
end
end

-- Set eventArgs.handled to true if we don't want the automatic display to be run.
function display_current_job_state(eventArgs)

end

-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------

-- Custom spell mapping.
function job_get_spell_map(spell)
if spell.type == 'BloodPactRage' then
if magicalRagePacts:contains(spell.english) then
return 'MagicalBloodPactRage'
else
return 'PhysicalBloodPactRage'
end
end
end


-- Cast the appopriate storm for the currently summoned avatar, if possible.
function handle_petweather()
if player.sub_job ~= 'SCH' then
add_to_chat(122, "You can not cast storm spells")
return
end

if not pet.isvalid then
add_to_chat(122, "You do not have an active avatar.")
return
end

local element = pet.element
if element == 'Thunder' then
element = 'Lightning'
end

if S{'Light','Dark','Lightning'}:contains(element) then
add_to_chat(122, 'You do not have access to '..elements.storm_of[element]..'.')
return
end	

local storm = elements.storm_of[element]

if storm then
send_command('@input /ma "'..elements.storm_of[element]..'" <me>')
else
add_to_chat(123, 'Error: Unknown element ('..tostring(element)..')')
end
end


-- Custom uber-handling of Elemental Siphon
function handle_siphoning()
if areas.Cities:contains(world.area) then
add_to_chat(122, 'Cannot use Elemental Siphon in a city area.')
return
end

local siphonElement
local stormElementToUse
local releasedAvatar
local dontRelease

-- If we already have a spirit out, just use that.
if pet.isvalid and spirits:contains(pet.name) then
siphonElement = pet.element
dontRelease = true
-- If current weather doesn't match the spirit, but the spirit matches the day, try to cast the storm.
if player.sub_job == 'SCH' and pet.element == world.day_element and pet.element ~= world.weather_element then
if not S{'Light','Dark','Lightning'}:contains(pet.element) then
stormElementToUse = pet.element
end
end
-- If we're subbing /sch, there are some conditions where we want to make sure specific weather is up.
-- If current (single) weather is opposed by the current day, we want to change the weather to match
-- the current day, if possible.
elseif player.sub_job == 'SCH' and world.weather_element ~= 'None' then
local intense = get_weather_intensity()
-- We can override single-intensity weather; leave double weather alone, since even if
-- it's partially countered by the day, it's not worth changing.
if intense == 1 then
-- If current weather is weak to the current day, it cancels the benefits for
-- siphon. Change it to the day's weather if possible (+0 to +20%), or any non-weak
-- weather if not.
-- If the current weather matches the current avatar's element (being used to reduce
-- perpetuation), don't change it; just accept the penalty on Siphon.
if world.weather_element == elements.weak_to[world.day_element] and
(not pet.isvalid or world.weather_element ~= pet.element) then
-- We can't cast lightning/dark/light weather, so use a neutral element
if S{'Light','Dark','Lightning'}:contains(world.day_element) then
stormElementToUse = 'Wind'
else
stormElementToUse = world.day_element
end
end
end
end

-- If we decided to use a storm, set that as the spirit element to cast.
if stormElementToUse then
siphonElement = stormElementToUse
elseif world.weather_element ~= 'None' and world.weather_element ~= elements.weak_to[world.day_element] then
siphonElement = world.weather_element
else
siphonElement = world.day_element
end

local command = ''
local releaseWait = 0

if pet.isvalid and avatars:contains(pet.name) then
command = command..'input /pet "Release" <me>;wait 1.1;'
releasedAvatar = pet.name
releaseWait = 10
end

if stormElementToUse then
command = command..'input /ma "'..elements.storm_of[stormElementToUse]..'" <me>;wait 4;'
releaseWait = releaseWait - 4
end

if not (pet.isvalid and spirits:contains(pet.name)) then
command = command..'input /ma "'..elements.spirit_of[siphonElement]..'" <me>;wait 4;'
releaseWait = releaseWait - 4
end

command = command..'input /ja "Elemental Siphon" <me>;'
releaseWait = releaseWait - 1
releaseWait = releaseWait + 0.1

if not dontRelease then
if releaseWait > 0 then
command = command..'wait '..tostring(releaseWait)..';'
else
command = command..'wait 1.1;'
end

command = command..'input /pet "Release" <me>;'
end

if releasedAvatar then
command = command..'wait 1.1;input /ma "'..releasedAvatar..'" <me>'
end

send_command(command)
end


-- Handles executing blood pacts in a generic, avatar-agnostic way.
-- cmdParams is the split of the self-command.
-- gs c [pact] [pacttype]
function handle_pacts(cmdParams)
if areas.Cities:contains(world.area) then
add_to_chat(122, 'You cannot use pacts in town.')
return
end

if not pet.isvalid then
add_to_chat(122,'No avatar currently available. Returning to macro set 2.')
set_macro_page(10)
return
end

if spirits:contains(pet.name) then
add_to_chat(122,'Cannot use pacts with spirits.')
return
end

if not cmdParams[2] then
add_to_chat(123,'No pact type given.')
return
end

local pact = cmdParams[2]:lower()

if not pacts[pact] then
add_to_chat(123,'Unknown pact type: '..tostring(pact))
return
end

if pacts[pact][pet.name] then
if pact == 'astralflow' and not buffactive['astral flow'] then
add_to_chat(122,'Cannot use Astral Flow pacts without 2hr active.')
return
end

-- Leave out target; let Shortcuts auto-determine it.
send_command('@input /pet "'..pacts[pact][pet.name]..'"')
else
add_to_chat(122,pet.name..' does not have a pact of type ['..pact..'].')
end
end


function create_pact_timer(spell)
-- Create custom timers for ward pacts.
if durations and durations[spell.english] then
local timer_cmd = 'timers c "'..spell.english..'" '..tostring(durations[spell.english])..' down'

if timer_icons[spell.english] then
timer_cmd = timer_cmd..' '..timer_icons[spell.english]
end

send_command(timer_cmd)
end
end

-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
-- Default macro set/book
set_macro_page(10, 2)
end
 Phoenix.Jiluun
Offline
Serveur: Phoenix
Game: FFXI
user: jiluun
Posts: 33
By Phoenix.Jiluun 2014-05-18 05:45:04
Link | Citer | R
 
Hello Recently got BRD Relic and I have Terpander.

Was looking for a spellcast got sent to Moteten's so have been trying to understand it best that I can. So far have only renamed gear slots nothing else that I can think of. Problem is I cant seem to find nor does the precast gear work properly. I am positive its something I done wrong so here is a picture of what Spellcast says Its equiping.

I do have all files in proper folder.

This is what I want for my precast.



Equip List on Cast





Here is the whole thing Not sure what part I messed up.
 Fenrir.Motenten
VIP
Offline
Serveur: Fenrir
Game: FFXI
user: Motenten
Posts: 764
By Fenrir.Motenten 2014-05-18 08:01:00
Link | Citer | R
 
Phoenix.Jiluun said: »
Problem is I cant seem to find

Can't seem to find what?

Phoenix.Jiluun said: »
nor does the precast gear work properly

Please be more explicit. This tells me nothing.

Phoenix.Jiluun said: »
I am positive its something I done wrong so here is a picture of what Spellcast says Its equiping.

This also tells me nothing. I have no idea what you're doing, what you're expecting, or what you're thinking is or isn't happening.

Also, learn to use the [code] tag.


Phoenix.Damnit said: »
Console states~ error in the user function Self_commands.Lua:32: attempt to index global 'selfcomandmaps' (a nil Value, also i think the runtime error in flow.lua:276: accompanies the previous error.

selfcommandmaps is a table that is in the Mote-SelfCommands.lua file. If you're getting a nil reference, you may have corrupted that file. Try downloading a fresh copy.

Phoenix.Damnit said: »
Basically is there a way to get your Lua to act as Byrths and revert back to the "set.idle.avatar" once it reads that the ability or spell timer is not ready?

That's how it should behave already. It's not a matter of "getting my lua to do that". What it needs is debugging on why that's not happening.

When I get a chance, I'll try testing out some smn stuff on my own, as well.
 Phoenix.Jiluun
Offline
Serveur: Phoenix
Game: FFXI
user: jiluun
Posts: 33
By Phoenix.Jiluun 2014-05-18 08:25:47
Link | Citer | R
 
This is what I would like. I will tackle one issue at a time.
Precast Gear to work properly. I thought I had put it in the correct spot buy I may be wrong. I want to use the <set name="FastCast-Singing-*"> as the precast.
Code
  <group name="FastCast-*">
            <!-- Construct fast cast sets for a set amount of fast cast gear. -->
            <!-- Break down by spell category (either Cure, or the skill type). -->
            <!-- Do not include traits or merits. -->
            <!-- Tiers are: 10, 20, 30, 40, 50, 60, 65, 70, 75, 80. -->
            <!-- Can use a wildcard when it's not possible to go any higher. -->

            <set name="FastCast-Singing-10">
                <rear>Loquacious Earring</rear>
                <lring>Prolix Ring</lring>
                <feet>Bokwus Boots</feet>
            </set>
            <set name="FastCast-Singing-20">
                <head>Aoidos' Calot +2</head>
                <rear>Loquacious Earring</rear>
                <feet>Bokwus Boots</feet>
            </set>
            <set name="FastCast-Singing-30">
                <head>Aoidos' Calot +2</head>
                <rear>Loquacious Earring</rear>
                <hands>Gendewitha Gages</hands>
                <feet>Bokwus Boots</feet>
            </set>
            <set name="FastCast-Singing-40">
                <head>Aoidos' Calot +2</head>
                <rear>Loquacious Earring</rear>
                <body>Sha'ir Manteel</body>
                <hands>Gendewitha Gages</hands>
                <feet>Bokwus Boots</feet>
            </set>
            <set name="FastCast-Singing-50">
                <head>Aoidos' Calot +2</head>
                <neck>Aoidos' Matinee</neck>
                <lear>Aoidos' Earring</lear>
                <rear>Loquacious Earring</rear>
                <body>Sha'ir Manteel</body>
                <hands>Gendewitha Gages</hands>
                <waist>Aoidos' Belt</waist>
                <feet>Bokwus Boots</feet>
            </set>
            <set name="FastCast-Singing-*">
                <head>Aoidos' Calot +2</head>
                <neck>Aoidos' Matinee</neck>
                <lear>Aoidos' Earring</lear>
                <rear>Loquacious Earring</rear>
                <body>Sha'ir Manteel</body>
                <hands>Marduk's Dastanas +1</hands>
                <lring>Prolix Ring</lring>
                <back>Swith Cape</back>
                <waist>Aoidos' Belt</waist>
                <legs>Gendewitha Spats</legs>
                <feet>Bihu Slippers +1</feet>
            </set>
 Fenrir.Motenten
VIP
Offline
Serveur: Fenrir
Game: FFXI
user: Motenten
Posts: 764
By Fenrir.Motenten 2014-05-18 08:54:35
Link | Citer | R
 
Phoenix.Jiluun said: »
Precast Gear to work properly.

Define "work properly", and please explain what you feel is not working properly now.
 Phoenix.Jiluun
Offline
Serveur: Phoenix
Game: FFXI
user: jiluun
Posts: 33
By Phoenix.Jiluun 2014-05-18 09:09:34
Link | Citer | R
 
Quote:
Phoenix.Jiluun said: »
Precast Gear to work properly.

Define "work properly", and please explain what you feel is not working properly now.


The precast gear that spellcast showing isn't correct and the songs are going off after my idle set is back on. Here is a photo showing what it is saying my precast/midcast/ gear is.


Photo

This is what it should be but the photo isn't showing it.
Code
  <set name="FastCast-Singing-*">
              <head>Aoidos' Calot +2</head>
              <neck>Aoidos' Matinee</neck>
              <lear>Aoidos' Earring</lear>
              <rear>Loquacious Earring</rear>
              <body>Sha'ir Manteel</body>
              <hands>Marduk's Dastanas +1</hands>
              <lring>Prolix Ring</lring>
              <back>Swith Cape</back>
              <waist>Aoidos' Belt</waist>
              <legs>Gendewitha Spats</legs>
              <feet>Bihu Slippers +1</feet>
          </set>
 Ragnarok.Legendarycloud
Offline
Serveur: Ragnarok
Game: FFXI
Posts: 209
By Ragnarok.Legendarycloud 2014-05-18 09:42:13
Link | Citer | R
 
I also need some assistance Mote, if you're able to. (I'm pretty poor with gearswap at the moment but doing my best to learn!)

Currently I'm using your RDM.lua (the Kinematics one). The only thing is I would like to add a high magic accuracy set for Stun (which would essentially swap my Apamajas II to an iLvl staff). I would also need to know how to cycle between normal Macc and High Macc sets. I liked how Bokura's RDM.lua was set up, but he was missing the composure and enhancing magic rules that your gearswap has. The file I'm using is below. Any help would be greatly appreciated!


Code
-------------------------------------------------------------------------------------------------------------------
-- Initialization function that defines sets and variables to be used.
-------------------------------------------------------------------------------------------------------------------

-- IMPORTANT: Make sure to also get the Mote-Include.lua file (and its supplementary files) to go with this.

-- Initialization function for this job file.
function get_sets()
	-- Load and initialize the include file.
	include('Mote-Include.lua')
end


-- Setup vars that are user-independent.
function job_setup()
	state.Buff.Saboteur = buffactive.saboteur or false
end


-- Setup vars that are user-dependent.  Can override this function in a sidecar file.
function user_setup()
	-- Options: Override default values
	options.OffenseModes = {'Normal'}
	options.DefenseModes = {'Normal'}
	options.WeaponskillModes = {'Normal'}
	options.CastingModes = {'Normal'}
	options.IdleModes = {'Normal'}
	options.RestingModes = {'Normal'}
	options.PhysicalDefenseModes = {'PDT'}
	options.MagicalDefenseModes = {'MDT'}

	state.Defense.PhysicalMode = 'PDT'

	MeleeWeapons = S{"Buramenk'ah"}

	
end


-- Called when this job file is unloaded (eg: job change)
function file_unload()
	if binds_on_unload then
		binds_on_unload()
	end
end


-- Define sets and vars used by this job file.
function init_gear_sets()
	--------------------------------------
	-- Start defining the sets
	--------------------------------------

	-- Precast Sets

	-- Precast sets to enhance JAs
	sets.precast.JA['Chainspell'] = {body="Vitivation Tabard"}


	-- Waltz set (chr and vit)
	sets.precast.Waltz = {
		head="Atrophy Chapeau +1",
		body="Atrophy Tabard +1",hands="Yaoyotl Gloves",
		back="Refraction Cape",legs="Hagondes Pants",feet="Hagondes Sabots"}

	-- Don't need any special gear for Healing Waltz.
	sets.precast.Waltz['Healing Waltz'] = {}

	-- Fast cast sets for spells

	-- 80% Fast Cast (including trait) for all spells, plus 5% quick cast
	-- No other FC sets necessary.
	sets.precast.FC = {ammo="Impatiens",
		head="Atrophy Chapeau +1",neck="Orunmila's Torque",ear2="Loquacious Earring",
		body="Vitivation Tabard",hands="Gendewitha Gages",ring1="Prolix Ring", ring2="Veneficium Ring",
		back="Swith Cape",waist="Witful Belt",legs="Artsieq Hose",feet="Chelona Boots +1"}

	sets.precast.FC.Impact = set_combine(sets.precast.FC, {head=empty,body="Twilight Cloak"})
       
	-- Weaponskill sets
	-- Default set for any weaponskill that isn't any more specifically defined
	sets.precast.WS = {
		head="Atrophy Chapeau +1",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
		body="Atrophy Tabard +1",hands="Yaoyotl Gloves",ring1="Rajas Ring",ring2="K'ayres Ring",
		back="Atheling Mantle",waist="Caudata Belt",legs="Hagondes Pants",feet="Hagondes Sabots"}

	-- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
	sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS, 
		{neck="Soil Gorget",ear1="Brutal Earring",ear2="Moonshade Earring",
		ring1="Aquasoul Ring",ring2="Aquasoul Ring",waist="Soil Belt"})

	sets.precast.WS['Sanguine Blade'] = {ammo="Witchstone",
		head="Hagondes Hat",neck="Stoicheion Medal",ear1="Friomisi Earring",ear2="Hecate's Earring",
		body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Icesoul Ring",ring2="Strendu Ring",
		back="Toro Cape",legs="Hagondes Pants",feet="Hagondes Sabots"}


	-- Midcast Sets

	sets.midcast.FastRecast = {
		head="Atrophy Chapeau +1",ear2="Loquacious Earring",
		body="Vitivation Tabard",hands="Gendewitha Gages",ring1="Prolix Ring",
		back="Swith Cape",waist="Witful Belt",legs="Hagondes Pants",feet="Hagondes Sabots"}

	sets.midcast.Cure = {main="Tamaxchi", sub="Genbu's Shield",
		head="Gendewitha Caubeen",neck="Colossus's Torque",ear1="Roundel Earring",ear2="Loquacious Earring",
		body="Heka's Kalasiris",hands="Bokwus Gloves",ring1="Prolix Ring",ring2="Karka Ring",
		back="Pahtli Cape Cape",waist="Witful Belt",legs="Atrophy Tights",feet="Gendewitha Galoshes"}

	sets.midcast.Curaga = sets.midcast.Cure

	sets.midcast['Enhancing Magic'] = {
		head="Atrophy Chapeau +1",neck="Colossus's Torque",
		body="Vitivation Tabard",hands="Atrophy Gloves",ring1="Prolix Ring",
		back="Estoqueur's Cape",waist="Olympus Sash",legs="Atrophy Tights",feet="Estoqueur's Houseaux +2"}

	sets.midcast.Refresh = {legs="Estoqueur's Fuseau +2"}

	sets.midcast.Stoneskin = {waist="Siegel Sash"}

	sets.midcast['Enfeebling Magic'] = {main="Lehbrailg +2", sub="Mephitis Grip", ammo="Kalboron Stone",
		head="Atrophy Chapeau +1",neck="Imbodla Necklace",ear1="Lifestorm Earring",ear2="Psystorm Earring",
		body="Atrophy Tabard +1",hands="Yaoyotl Gloves",ring1="Sangoma Ring",ring2="Perception Ring",
		back="Refraction Cape",waist="Casso Sash",legs="Bokwus Slops",feet="Vitivation Boots"}

	sets.midcast['Dia III'] = set_combine(sets.midcast['Enfeebling Magic'], {head="Vitivation Chapeau"})

	sets.midcast['Slow II'] = set_combine(sets.midcast['Enfeebling Magic'], {head="Vitivation Chapeau"})

	sets.midcast['Paralyze II'] = set_combine(sets.midcast['Enfeebling Magic'], {head="Vitivation Chapeau"})

	sets.midcast['Elemental Magic'] = {main="Lehbrailg +2", sub="Wizzan Grip", ammo="Erlene's Notebook",
		head="Hagondes Hat",neck="Eddy Necklace",ear1="Friomisi Earring",ear2="Novio Earring",
		body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Strendu Ring",ring2="Acumen Ring",
		back="Toro Cape",waist=gear.ElementalObi,legs="Hagondes Pants",feet="Umbani Boots"}

	gear.default.obi_waist = "Othila Sash"

	sets.midcast.Impact = set_combine(sets.midcast['Elemental Magic'], {head=empty,body="Twilight Cloak"})

	sets.midcast['Dark Magic'] = {main="Lehbrailg +2", sub="Mephitis Grip", ammo="Impatiens",
		head="Atrophy Chapeau +1",neck="Imbodla Necklace",ear1="Lifestorm Earring",ear2="Psystorm Earring",
		body="Adhara Manteel",hands="Avesta Bangles",ring1="Sangoma Ring",ring2="Perception Ring",
		back="Refraction Cape",waist="Goading Belt",legs="Bokwus Slops",feet="Bokwus Boots"}

	sets.midcast.Stun = set_combine(sets.midcast['Dark Magic'], {main="Apamajas II",neck="Orunmila's Torque", 
	ear1="Gwati Earring",ear2="Abyssal Earring",body="Hedera Cotehardie",hands="Hagondes Cuffs",
	ring2="Veneficium Ring",back="Swith Cape",waist="Dynamic Belt +1",legs="Artsieq Hose",feet="Chelona Boots +1"})

	--sets.midcast.Drain = set_combine(sets.midcast['Dark Magic'], {ring2="Excelsis Ring"})

	--sets.midcast.Aspir = sets.midcast.Drain


	-- Sets for special buff conditions on spells.

	sets.midcast.EnhancingDuration = {hands="Atrophy Gloves",back="Estoqueur's Cape",feet="Estoqueur's Houseaux +2"}

	sets.buff.ComposureOther = {head="Estoqueur's Chappel +2",
		body="Estoqueur's Sayon +2",hands="Estoqueur's Gantherots +2",
		legs="Estoqueur's Fuseau +2",feet="Estoqueur's Houseaux +2"}

	sets.buff.Saboteur = {hands="Estoqueur's Gantherots +2"}


	-- Sets to return to when not performing an action.

	-- Resting sets
	sets.resting = {main="Chatoyant Staff",
		head="Vitivation Chapeau",neck="Wiglen Gorget",
		body="Atrophy Tabard +1",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
		waist="Austerity Belt",legs="Nares Trews",feet="Chelona Boots +1"}


	-- Idle sets (default idle set not needed since the other three are defined, but leaving for testing purposes)
	sets.idle.Town = {main="Buramenk'ah",sub="Genbu's Shield",ammo="Impatiens",
		head="Atrophy Chapeau +1",neck="Wiglen Gorget",ear1="Bloodgem Earring",ear2="Loquacious Earring",
		body="Atrophy Tabard +1",hands="Atrophy Gloves +1",ring1="Sheltered Ring",ring2="Paguroidea Ring",
		back="Shadow Mantle",waist="Flume Belt",legs="Blood Cuisses",feet="Umbani Boots"}

	sets.idle.Field = {main="Buramenk'ah",sub="Genbu's Shield",ammo="Impatiens",
		head="Vitivation Chapeau",neck="Wiglen Gorget",ear1="Bloodgem Earring",ear2="Loquacious Earring",
		body="Hagondes Coat",hands="Yaoyotl Gloves",ring1="Sheltered Ring",ring2="Paguroidea Ring",
		back="Shadow Mantle",waist="Flume Belt",legs="Blood Cuisses",feet="Umbani Boots"}

	sets.idle.Weak = {main="Buramenk'ah",sub="Genbu's Shield",ammo="Impatiens",
		head="Vitivation Chapeau",neck="Wiglen Gorget",ear1="Bloodgem Earring",ear2="Loquacious Earring",
		body="Atrophy Tabard +1",hands="Serpentes Cuffs",ring1="Sheltered Ring",ring2="Paguroidea Ring",
		back="Shadow Mantle",waist="Flume Belt",legs="Blood Cuisses",feet="Umbani Boots"}

	-- Defense sets
	sets.defense.PDT = {
		head="Atrophy Chapeau +1",neck="Twilight Torque",ear1="Bloodgem Earring",ear2="Loquacious Earring",
		body="Hagondes Coat",hands="Gendewitha Gages",ring1="Dark Ring",ring2="Dark Ring",
		back="Shadow Mantle",waist="Flume Belt",legs="Hagondes Pants",feet="Gendewitha Galoshes"}

	sets.defense.MDT = {ammo="Demonry Stone",
		head="Atrophy Chapeau +1",neck="Twilight Torque",ear1="Bloodgem Earring",ear2="Loquacious Earring",
		body="Atrophy Tabard +1",hands="Yaoyotl Gloves",ring1="Dark Ring",ring2="Shadow Ring",
		back="Engulfer Cape",waist="Flume Belt",legs="Bokwus Slops",feet="Gendewitha Galoshes"}

	sets.Kiting = {legs="Crimson Cuisses"}

	-- Engaged sets

	-- Variations for TP weapon and (optional) offense/defense modes.  Code will fall back on previous
	-- sets if more refined versions aren't defined.
	-- If you create a set with both offense and defense modes, the offense mode should be first.
	-- EG: sets.engaged.Dagger.Accuracy.Evasion

	-- Normal melee group
	sets.engaged = {
		head="Atrophy Chapeau +1",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
		body="Atrophy Tabard +1",hands="Atrophy Gloves +1",ring1="Rajas Ring",ring2="K'ayres Ring",
		back="Atheling Mantle",waist="Goading Belt",legs="Osmium Cuisses",feet="Atrophy Boots"}

end

-------------------------------------------------------------------------------------------------------------------
-- Job-specific hooks that are called to process player actions at specific points in time.
-------------------------------------------------------------------------------------------------------------------

-- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
function job_midcast(spell, action, spellMap, eventArgs)
	if spell.action_type == 'Magic' then
		-- Default base equipment layer of fast recast.
		equip(sets.midcast.FastRecast)
	end
end

-- Run after the default midcast() is done.
-- eventArgs is the same one used in job_midcast, in case information needs to be persisted.
function job_post_midcast(spell, action, spellMap, eventArgs)
	if spell.skill == 'Enfeebling Magic' and state.Buff.Saboteur then
		equip(sets.buff.Saboteur)
	elseif spell.skill == 'Enhancing Magic' then
		if buffactive.composure and spell.target.type == 'PLAYER' then
			equip(sets.buff.ComposureOther)
		elseif spell.target.type == 'SELF' then
			equip(sets.midcast.EnhancingDuration)
		end
	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 then
		if state.Buff[spell.english] ~= nil then
			state.Buff[spell.english] = true
		end
	end
end

-------------------------------------------------------------------------------------------------------------------
-- Customization hooks for idle and melee sets, after they've been automatically constructed.
-------------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------------
-- General hooks for other events.
-------------------------------------------------------------------------------------------------------------------

-- Called when a player gains or loses a buff.
-- buff == buff gained or lost
-- gain == true if the buff was gained, false if it was lost.
function job_buff_change(buff, gain)
	if state.Buff[buff] ~= nil then
		state.Buff[buff] = gain
	end
end


-------------------------------------------------------------------------------------------------------------------
-- User code that supplements self-commands.
-------------------------------------------------------------------------------------------------------------------

-- 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)
	if MeleeWeapons:contains(player.equipment.main) then
		disable('main', 'sub')
	else
		enable('main', 'sub')
	end
end

-- Set eventArgs.handled to true if we don't want the automatic display to be run.
function display_current_job_state(eventArgs)
	local defenseString = ''
	if state.Defense.Active then
		local defMode = state.Defense.PhysicalMode
		if state.Defense.Type == 'Magical' then
			defMode = state.Defense.MagicalMode
		end

		defenseString = 'Defense: '..state.Defense.Type..' '..defMode..', '
	end

	local meleeString = ''
	if state.OffenseMode == 'Normal' then
		--meleeString = 'Melee: Weapons locked, '
	end

	add_to_chat(122,'Casting ['..state.CastingMode..'], '..meleeString..'Idle ['..state.IdleMode..'], '..defenseString..
		'Kiting: '..on_off_names[state.Kiting])

	eventArgs.handled = true
end

-------------------------------------------------------------------------------------------------------------------
-- Utility functions specific to this job.
-------------------------------------------------------------------------------------------------------------------


 Phoenix.Damnit
Offline
Serveur: Phoenix
Game: FFXI
user: bignig
Posts: 38
By Phoenix.Damnit 2014-05-18 11:19:08
Link | Citer | R
 
thanks mote, I'll DL a new copy of self commands and see if that straightens it out :)

Edit: that fixed it boss, thank you :)
 Fenrir.Motenten
VIP
Offline
Serveur: Fenrir
Game: FFXI
user: Motenten
Posts: 764
By Fenrir.Motenten 2014-05-18 16:21:52
Link | Citer | R
 
Ragnarok.Legendarycloud said: »
I also need some assistance Mote, if you're able to. (I'm pretty poor with gearswap at the moment but doing my best to learn!)

Currently I'm using your RDM.lua (the Kinematics one). The only thing is I would like to add a high magic accuracy set for Stun (which would essentially swap my Apamajas II to an iLvl staff). I would also need to know how to cycle between normal Macc and High Macc sets. I liked how Bokura's RDM.lua was set up, but he was missing the composure and enhancing magic rules that your gearswap has. The file I'm using is below. Any help would be greatly appreciated!


Any normally defined set (eg: sets.midcast.Stun) can have additional sub-tables added that define gear sets based on casting mode. Simply define a new casting mode (the rdm file only uses the default 'Normal'; add an extra, like 'Resistant'), and then create a new set to match.

eg:
Code
    options.CastingModes = {'Normal', 'Resistant'}
    ...
    sets.midcast.Stun = {}
    sets.midcast.Stun.Resistant = {}


The default keybind for changing casting modes is Ctrl-F11.
[+]
First Page 2 3 ... 8 9 10 ... 182 183 184
Log in to post.