PeteSampras
Active member
- Joined
- Mar 18, 2012
- RedCents
- 2,143¢
Slight Caveat, it *will* work with vanilla compile in the coming days. EQMule is going to add in a bunch of cases in the next compile, or soon, once he does, you can take advantage of this routine to automatically use the best available clicky buff on you for each type. You can modify which buffs you want, by class, if you so choose. It is pretty obvious in the code how to do that. You can make this an #include, or toss it into any macro you have.
The cases he needs to add to make this work are Spell[].Base and Spell[].Rank, both of which he said he checked out and was adding. If for some reason he forgets, I will repost them for him to add and it may delay this working until then. I just wanted to post it while I was working on something related to it.
if using as include:
Step 1:
#include name_of_file.inc
Step 2: somewhere before your mainloop (optional, default is FALSE and will ignore clickies in your bags, set to TRUE it checks your bags)
/declare IgnoreClickyBuffsInBags bool outer FALSE
Somewhere in your main loop:
/call CastAutoClickies
And tada, you no longer have to add any of those standard buffs to any of your macros ever again. As you can see above, Geomantra and Damage shield click are set off by default due to so many class stacking issues, you can add classes to that if you want to.
I already have been using this daily for year(s) now, but once .Base and .Rank are added to the compile in the near future (thinking this week sometime), it will work for you, until then just patiently wait.
The cases he needs to add to make this work are Spell[].Base and Spell[].Rank, both of which he said he checked out and was adding. If for some reason he forgets, I will repost them for him to add and it may delay this working until then. I just wanted to post it while I was working on something related to it.
if using as include:
Step 1:
#include name_of_file.inc
Step 2: somewhere before your mainloop (optional, default is FALSE and will ignore clickies in your bags, set to TRUE it checks your bags)
/declare IgnoreClickyBuffsInBags bool outer FALSE
Somewhere in your main loop:
/call CastAutoClickies
Rich (BB code):
Sub CastAutoClickies
/if (${Defined[CurrentSub]}) /varset CurrentSub CastAutoClickies
/if (!${Defined[AutoClickiesLoad]}) /call CastAutoClickiesLoad
/call CastDoClickies
/if (${FindItem[Chalandria's Fang].ItemSlot} && !${FindItem[Chalandria's Fang].Timer}) {
/if (${Me.HaveExpansion[Veil of Alaris]} && ${Me.Subscription.Equal[GOLD]}) /useitem ${FindItem[=Chalandria's Fang].ItemSlot} ${FindItem[=Chalandria's Fang].ItemSlot2}
/if (!${Me.HaveExpansion[Veil of Alaris]}) /casting "Chalandria's Fang"|item
/delay 1s
/autoinventory
}
/return
Sub CastAutoClickiesLoad
/if (${Defined[CurrentSub]}) /varset CurrentSub CastAutoClickiesLoad
/if (${AutoClickiesLoaded}) /return
/if (!${Defined[AutoClickiesLoad]}) /declare AutoClickiesLoad int outer 1
/if (!${Defined[IgnoreClickyBuffsInBags]}) /declare IgnoreClickyBuffsInBags bool local TRUE
/declare iBuffTotal int local 17
/declare ClickyArray[${iBuffTotal},4] string outer 0
/declare sBuff1 string local Ancestral Memories
/declare sBuffClass1 string local |BER|BST|BRD|MNK|PAL|RNG|ROG|SHD|WAR|
/declare sBuff2 string local Taelosian Guard
/declare sBuffClass2 string local |BER|BST|BRD|MNK|PAL|RNG|ROG|SHD|WAR|
/declare sBuff3 string local Might of Stone
/declare sBuffClass3 string local |BER|BST|BRD|MNK|PAL|RNG|ROG|SHD|WAR|
/declare sBuff4 string local Form of Defense
/declare sBuffClass4 string local |PAL|SHD|WAR|
/declare sBuff5 string local Prismatic Ward
/declare sBuffClass5 string local |BER|BST|BRD|CLR|DRU|ENC|MAG|MNK|NEC|PAL|RNG|ROG|SHD|SHM|WAR|WIZ|
/declare sBuff6 string local Form of Endurance
/declare sBuffClass6 string local |BER|BST|BRD|CLR|DRU|ENC|MAG|MNK|NEC|PAL|RNG|ROG|SHD|SHM|WAR|WIZ|
/declare sBuff7 string local Myrmidon's Skill
/declare sBuffClass7 string local |BER|BST|BRD|CLR|DRU|ENC|MAG|MNK|NEC|PAL|RNG|ROG|SHD|SHM|WAR|WIZ|
/declare sBuff8 string local Knowledge of the Past
/declare sBuffClass8 string local |BST|CLR|DRU|ENC|MAG|NEC|PAL|RNG|SHD|SHM|WIZ|
/declare sBuff9 string local Soothing Breath
/declare sBuffClass9 string local |BST|CLR|DRU|ENC|MAG|NEC|PAL|RNG|SHD|SHM|WIZ|
/declare sBuff10 string local Illusionary Spikes
/declare sBuffClass10 string local |
/declare sBuff11 string local Geomantra
/declare sBuffClass11 string local |
/declare sBuff12 string local Expanding Mind
/declare sBuffClass12 string local |BST|CLR|DRU|ENC|MAG|NEC|PAL|RNG|SHD|SHM|WIZ|
/declare sBuff13 string local Symphony of Battle
/declare sBuffClass13 string local |BRD|
/declare sBuff14 string local Twitching Speed
/declare sBuffClass14 string local |BER|BST|MNK|PAL|RNG|ROG|SHD|WAR|
/declare sBuff15 string local Aura of Pure Arcanum
/declare sBuffClass15 string local |BER|BST|BRD|CLR|DRU|ENC|MAG|MNK|NEC|PAL|RNG|ROG|SHD|SHM|WAR|WIZ|
/declare sBuff16 string local Aura of Rage
/declare sBuffClass16 string outer |BER|BST|MNK|PAL|RNG|ROG|SHD|WAR|
/declare sBuff17 string outer Ancient Flames
/declare sBuffClass17 string outer |BER|BST|BRD|CLR|DRU|ENC|MAG|MNK|NEC|PAL|RNG|ROG|SHD|SHM|WAR|WIZ|
/declare BuffRank string local , I , II , III , IV , V , VI , VII , VIII , IX , X , XI , XII , XII , XIV , XV , XVI , XVII , XVIII , XIX , XX , XXI , XXII , XXIII , XXIV , XXV , XXVI , XXVII , XXVIII , XXIX , XXX ,
|/call CastGetEquipment
/declare sTempName string local
/declare i int local
/declare iSlot int local
/declare iItemNum int local
/declare sItemName string local
/declare iClickyRank int local
/for iSlot 1 to 32
|top level inventory
/if (${InvSlot[${iSlot}].Item.Name.NotEqual[NULL]}) {
/varset sItemName ${InvSlot[${iSlot}].Item.Spell.Name}
/if (${sItemName.NotEqual[NULL]} && ${InvSlot[${iSlot}].Item.EffectType.Find[Click]} && ${Me.Level}>=${Me.Inventory[${iSlot}].RequiredLevel} && ${Me.Inventory[${iSlot}].Class[${Me.Class}].Name.Equal[${Me.Class}]} && (!${Me.Inventory[${iSlot}].Attuneable}||${Me.Inventory[${iSlot}].Attuneable} && ${Me.Inventory[${iSlot}].NoDrop})) {
/for i 1 to ${iBuffTotal} {
/if (${Me.Inventory[${iSlot}].Spell.Name.Find[${sBuff${i}}]} && (${Me.Subscription.Equal[GOLD]}||!${Me.Inventory[${iSlot}].Item.Prestige})) {
/if (${Me.Inventory[${iSlot}].Spell.Name.Equal[${sBuff${i}}]}) {
/varset iClickyRank 26
/goto :skipii
}
/varcalc iClickyRank ${Me.Inventory[${iSlot}].Spell.Rank}+1
:skipii
/if (${sBuffClass${i}.Find[${Me.Class.ShortName}]} && ${iClickyRank}>${ClickyArray[${i},4]}) {
/varset ClickyArray[${i},1] 1
/varset ClickyArray[${i},2] ${Me.Inventory[${iSlot}].Spell}
/varset ClickyArray[${i},3] ${Me.Inventory[${iSlot}]}
/varset ClickyArray[${i},4] ${iClickyRank}
}
}
}
/next i
}
}
/if (!${IgnoreClickyBuffsInBags}) {
|Bag inventory
/if (${InvSlot[${iSlot}].Item.Container}>0) {
/for iItemNum 1 to ${InvSlot[${iSlot}].Item.Container}
/if (${Me.Inventory[${iSlot}].Item[${iItemNum}].ID} && ${Me.Inventory[${iSlot}].Item[${iItemNum}].Spell.ID} && ${Me.Inventory[${iSlot}].Item[${iItemNum}].CastTime} && ${Me.Inventory[${iSlot}].Item[${iItemNum}].WornSlots} && ${Me.Level}>=${Me.Inventory[${iSlot}].Item[${iItemNum}].RequiredLevel} && ${Me.Inventory[${iSlot}].Item[${iItemNum}].Class[${Me.Class}].Name.Equal[${Me.Class}]} && ${Spell[${Me.Inventory[${iSlot}].Item[${iItemNum}].Spell}].Duration}>50 && (!${Me.Inventory[${iSlot}].Item[${iItemNum}].Attuneable}||${Me.Inventory[${iSlot}].Item[${iItemNum}].Attuneable} && ${Me.Inventory[${iSlot}].Item[${iItemNum}].NoDrop}) && (${Me.Subscription.Equal[GOLD]}||!${Me.Inventory[${iSlot}].Item[${iItemNum}].Prestige})) {
/for i 1 to ${iBuffTotal} {
/if (${Me.Inventory[${iSlot}].Item[${iItemNum}].Spell.Name.Find[${sBuff${i}}]}) {
/if (${Me.Inventory[${iSlot}].Item[${iItemNum}].Spell.Name.Equal[${sBuff${i}}]}) {
/varset iClickyRank 26
/goto :skipiii
}
/varcalc iClickyRank ${Me.Inventory[${iSlot}].Spell.Rank}+1
:skipiii
/if (${sBuffClass${i}.Find[${Me.Class.ShortName}]} && ${iClickyRank}>${ClickyArray[${i},4]}) {
/varset ClickyArray[${i},1] 1
/varset ClickyArray[${i},2] ${Me.Inventory[${iSlot}].Item[${iItemNum}].Spell}
/varset ClickyArray[${i},3] ${Me.Inventory[${iSlot}].Item[${iItemNum}].Name}
/varset ClickyArray[${i},4] ${iClickyRank}
|/echo ${Me.Inventory[${iSlot}].Item[${iItemNum}].Name} - ${Me.Inventory[${iSlot}].Item[${iItemNum}].Spell}
}
}
}
/next i
}
/next iItemNum
}
}
/next iSlot
|/call CastCalculateBest
|Soothing vs KotP
/if (${ClickyArray[9,1]} && ${ClickyArray[8,1]}) {
/if (${Spell[${ClickyArray[8,2]}].Base[8]}>${Spell[${ClickyArray[9,2]}].Base[8]}) {
/varset ClickyArray[9,1] 0
|/echo ${ClickyArray[8,2]} is best
} else {
/varset ClickyArray[8,1] 0
|/echo ${ClickyArray[9,2]} is best
}
}
|FoD vs Pris Ward
/if (${ClickyArray[4,1]} && ${ClickyArray[5,1]}) {
/if (${Spell[${ClickyArray[4,2]}].Base[10]}>${Spell[${ClickyArray[5,2]}].Base[10]}) {
/varset ClickyArray[5,1] 0
|/echo ${ClickyArray[4,2]} is best
} else {
/varset ClickyArray[4,1] 0
|/echo ${ClickyArray[5,2]} is best
}
}
|Taelosian vs AM
/if (${ClickyArray[2,1]} && ${ClickyArray[1,1]}) {
/if (${Spell[${ClickyArray[1,2]}].Base[1]}>${Spell[${ClickyArray[2,2]}].Base[1]}) {
/varset ClickyArray[2,1] 0
|/echo ${ClickyArray[1,2]} is best
} else {
/varset ClickyArray[1,1] 0
|/echo ${ClickyArray[2,2]} is best
}
}
|ACoF
/if (${ClickyArray[17,1]} && ${ClickyArray[1,1]}||${ClickyArray[17,1]} && ${ClickyArray[2,1]}) {
/varset ClickyArray[2,1] 0
/varset ClickyArray[1,1] 0
}
/return
Sub CastDoClickies
/if (${Me.Hovering}||!${MMOBugs.FreeBuffs} && ${MMOBugs}||${Me.Casting.ID} && !${Me.Class.ShortName.Equal[BRD]}) /return
/if (${Defined[CurrentSub]}) /varset CurrentSub CastDoClickies
/declare i int local
/for i 1 to ${iBuffTotal}
/if (${ClickyArray[${i},1]} && ${Spell[${ClickyArray[${i},2]}].Stacks} && !${Me.Buff[${ClickyArray[${i},2]}].ID} && (!${Me.Invis}||${AutoBreakInvis} && ${AutoInvis}) && !${Me.Sitting} && (!${Me.Moving}||${Me.Class.ShortName.Equal[BRD]}) && (!${Me.Song[Commanding Voice].ID} && !${Me.Buff[Commanding Voice].ID} && !${Me.Song[Guardian Circle I Effect].ID} && !${Me.Song[Guardian Circle II Effect].ID} && !${Me.Song[Guardian Circle III Effect].ID}||${i}!=7)) {
/if (${Me.Hovering}||!${MMOBugs.FreeBuffs} && ${MMOBugs}||${Me.Casting.ID} && !${Me.Class.ShortName.Equal[BRD]}) /return
/if (${Twist.Twisting}) {
/declare twisttemp bool local
/twist off
/delay 2
}
/if (${FindItem[${ClickyArray[${i},3]}].EffectType.Equal[Click Inventory]} && ${Me.HaveExpansion[Veil of Alaris]} && (${Me.Subscription.Equal[GOLD]}||${FindItem[=${ClickyArray[${i},3]}].InvSlot}<33)) /useitem ${FindItem[=${ClickyArray[${i},3]}].ItemSlot} ${FindItem[=${ClickyArray[${i},3]}].ItemSlot2}
/if (${FindItem[${ClickyArray[${i},3]}].EffectType.Equal[Click Worn]}||!${Me.HaveExpansion[Veil of Alaris]}||${Me.Subscription.NotEqual[GOLD]}) /casting "${ClickyArray[${i},3]}"|item
/delay 1s ${Me.Casting.ID}
/if (${Plugin[mq2cecho].Name.Equal[mq2cecho]}) /cechob \au${ClickyArray[${i},3]} \aw--> ${ClickyArray[${i},2]}
/if (!${Plugin[mq2cecho].Name.Equal[mq2cecho]}) /echo ${ClickyArray[${i},3]} --> ${ClickyArray[${i},2]}
/delay 10s !${Me.Casting.ID}
/if (${twisttemp}) /twist on
}
/next i
/return
And tada, you no longer have to add any of those standard buffs to any of your macros ever again. As you can see above, Geomantra and Damage shield click are set off by default due to so many class stacking issues, you can add classes to that if you want to.
I already have been using this daily for year(s) now, but once .Base and .Rank are added to the compile in the near future (thinking this week sometime), it will work for you, until then just patiently wait.
Last edited:



