Here is some great info concerning Weave. Thank you too
@ctaylor22 for the information. Changed up my ini due to the better understanding.
Weave is designed for you to try and squeeze some extra damage in by letting you cast AA's, Items, etc.. That don't require the use of the casting window. Now for this to be effective we only call the weave routine when GCD is in effect.
The Weave entries (50 weave limit) get moved out of the DPS Array and into their own array(WeaveArraay). So when in the CambatCast routine, your DPS entries are being cycled through and Just before casting a DPS entry, the GCD is checked. If at this time the GCD is active the weave routine is called. Now this is also checked after all DPS entries have been cycled through. This last check is a little different, in the check looks to see if the weave routine was NOT called during the normal DPS loop.
In either case the CastWeave routine only checks for:
${Me.AltAbilityReady[${WeaveArray[${i}].Arg[1,|]}]} || ${Me.ItemReady[${WeaveArray[${i}].Arg[1,|]}]} || ${Me.CombatAbilityReady[${WeaveArray[${i}].Arg[1,|]}]}
So if it is NOT one of those, then it will fail. It does check every Weave entry so any of the entries that are ready should fire.
The Best way to do things in order is to use the DPSOn=2 I think it is. If DPSOn=2 then the CombatCast routine will wait through GCD, after the Weave routine was called.
Code:
| Only cast spells with weave tag during global cooldown
/if (${Me.SpellInCooldown} && !${IAmABard}) {
/if (${WeaveArray.Size}>0 && ${WeaveArray[1].NotEqual[null]}) {
/call CastWeave ${MyTargetID}
/varset WeaveCheck 1
}
/if (${Me.Gem[${DPSPart1}]} && ${Spawn[${MyTargetID}].ID}) {
DEBUGCOMBAT CombatCast Spell in Cool Down DPSOn: ${DPSOn}
/if (${DPSOn}==2) {
/while (${Me.SpellInCooldown}) {
/delay 2
}
} else {
/break
}
}
}
/if (${TargetSwitchingOn} && ${Target.ID} && ${Target.ID}!=${MyTargetID}) /call CombatTargetCheck 1
/call CastWhat "${DPSPart1}" ${DPSTargetID} DPS ${CondNo}
Notice the ${DPSOn}==2 that is after the /call CastWeave ${MyTargetID}. You will have to add some logic to your conditions for your DPS entries that skip an entry is a previous entry becomes abailable. I do this all the time. If the first 2 entries in your DPS routine, you want to cast ASAP as they become available, You Can Check !${SpellReady[SpellName]} on all your other entries, but I prefer to use ${Me.GemTimer[1]==0} that way it doesn't matter what spell I have in the Gem Slot, I just always use Gem[1], and Gem[2] as my Priority Gems to cast.
So my condition to cast anything while Gem[1] and Gem[2] are not ready would need to have ${Me.GemTimer[1]} && ${Me.GemTimer[2]} added to the condition. If the Gem Timer is active then the spell/gem can NOT be cast, and that's when you want to cast your other DPS entries.