Hello. Long Long Long time EQ player .. fairly new to PEQ emu. I have an issue I can't seem to figure out.. maybe I'm not configuring my buffs section right.... but I can't fathom how to do it. Issue is: I have my buffs section setup... but if i get higher level buffs placed on me that what i can self cast.... and it does not stack... i'm in an endless casting loop trying to overwrite a higher spell that mine wont overide or stack with. Example from my E3 (version 7) ToonName_PEQTGC.ini Self Buff=Worn Totem/CheckFor|Blessing of Swiftness Self Buff=Blessing of Piety/CheckFor|Blessing of Piety/Gem|1/MinMana|35 Self Buff=Bravery/CheckFor|Bravery/Gem|8/MinMana|35 Self Buff=Symbol of Ryltan/CheckFor|Symbol of Ryltan/Gem|7/MinMana|35 Self Buff=Guard/CheckFor|Guard/Gem|6/MinMana|35 So ... If i use Bocoh buff bots in Guild Lobby.... I'm stuck in a self buff loop trying to overwrite Temperance with my lesser Bravery ..... Is there some stacking check i'm not accounting for??? I'm too used to "other" mq2 compiles that have stack checks ... example: ${Spell[Illusion: Skeleton].Stacks} I am not seeing any STACKING checks on the e3_Casting.inc either . . . . . I'm assuming there should be a stacking check in there.. would only make sense since it handles the casting routines. What do i do ????
add /CheckFor|Temperance to the end of the Buff line that is trying to cast. Other option is to temporarily comment out the line using * or // in your ini. and for spells, just make a Macro where you /tell or in /g chat say to the cleric the name of the spell you want to buff. So you can still use it when Temp wears off. example /bcg //g Bravery /bcg //g Guard /bcg //g Symbol of Ryltan
I have a solution for this. e3_BuffCheck.inc needs to be altered: ORIGINAL: Code: SUB buffBots(ArrayName) /if (${Debug} || ${Debug_BuffCheck}) /echo |- buffBots [${ArrayName}] ==> /declare s int local /declare buffTargetID int local /declare buffTarget string local /declare buffSpellID int local /declare buffCheckForID int local /declare buffSpellName string local /declare buffCheckForName string local /declare currentBuffs string local /declare currentSongs string local /for s 1 to ${${ArrayName}.Size[1]} /if (${Debug} || ${Debug_BuffCheck}) /echo buffing ${${ArrayName}[${s},${iCastName}]} on ${${ArrayName}[${s},${iCastTarget}]} checkFor ${${ArrayName}[${s},${iCheckFor}]} /if (${Select[${ArrayName},InstantBuffs2D,SelfBuffs2D]}) { /varset buffTargetID ${Me.ID} /varset buffTarget ${Me.Name} } else /if (${Select[${ArrayName},CombatBuffs2D,BotBuffs2D]}) { /varset buffTargetID ${Spawn[=${${ArrayName}[${s},${iCastTarget}]}].ID} /varset buffTarget ${${ArrayName}[${s},${iCastTarget}]} } /varset buffSpellName ${${ArrayName}[${s},${iSpellName}]} /varset buffSpellID ${${ArrayName}[${s},${iSpellID}]}] /varset buffCheckForName ${${ArrayName}[${s},${iCheckFor}]} /varset buffCheckForID ${${ArrayName}[${s},${iCheckForID}]} /if (!${Bool[${NetBots[${buffTarget}].ID}]}) /goto :skipBuff |/echo ${buffSpellName} ${buffSpellID} ${buffCheckForName} ${buffCheckForID} ${Bool[${NetBots[${buffTarget}].Buff.Find[${buffSpellID} ]}]} |/echo ${buffSpellName} ${Select["${buffSpellName}","Thief's Eyes", "Fists of Wu", "Commanding Voice","Cry Havoc"]} /if (${Select[${buffSpellID},8001,8002,8000,8003]}) { /call meleeCombatBuffs "${ArrayName}" ${s} /goto :skipBuff } |------- Self ------| /if (${Select[${ArrayName},SelfBuffs2D,InstantBuffs2D]}) { /if (!${Bool[${Me.Buff[${buffSpellName}]}]} || (${Bool[${Me.Buff[${buffSpellName}]}]} && ${Me.Buff[${buffSpellName}].Duration.TotalSeconds} <= ${buffRecastTime})) { /if (!${Bool[${Me.Song[${buffSpellName}]}]} && !${Bool[${Me.Song[${buffCheckForName}]}]}) { /if (${Spell[${buffSpellID}].NewStacks} && !${Bool[${Me.Buff[${buffCheckForName}]}]}) { /call check_Ready "${ArrayName}" ${s} /if (${c_Ready} && ${${ArrayName}[${s},${iIfs}]}) { /if (${check_Mana["${ArrayName}",${s}]}) { /call e3_Cast ${buffTargetID} "${ArrayName}" ${s} } } else /if (${Debug} || ${Debug_BuffCheck}) /echo ${buffSpellName} is not ready for ${buffTarget} } else /if (${Debug} || ${Debug_BuffCheck}) /echo buff does not stack, or checkfor buff exists } else /if (${Debug} || ${Debug_BuffCheck}) /echo buff or checkfor buff exists in songs } else /if (${Debug} || ${Debug_BuffCheck}) /echo buff exists with duration > 30 seconds } else { |------- Netbots ------| /if (!${Bool[${NetBots[${buffTarget}].Buff.Find[${buffSpellID} ]}]} && !${Bool[${NetBots[${buffTarget}].ShortBuff.Find[${buffSpellID} ]}]} && ${NetBots[${buffTarget}].FreeBuffSlots}>0 && ${Bool[${NetBots[${buffTarget}].InZone}]}) { /if (!${Bool[${NetBots[${buffTarget}].Buff.Find[${buffCheckForID} ]}]} && !${Bool[${NetBots[${buffTarget}].ShortBuff.Find[${buffCheckForID} ]}]}) { /if (!${Spell[${buffSpellID}].NewStacks}) /goto :skipBuff /if (!${${ArrayName}[${s},${iTargetType}].Equal[Single in Group]} || ${Bool[${Group.Member[${buffTarget}]}]}) { /call check_Ready "${ArrayName}" ${s} /if (${c_Ready} && ${${ArrayName}[${s},${iIfs}]}) { /if (${check_Distance[${buffTargetID},${${ArrayName}[${s},${iMyRange}]}]}) { /if (${check_Mana["${ArrayName}",${s}]}) { /call e3_Cast ${buffTargetID} "${ArrayName}" ${s} /delay 3 ${Target.BuffsPopulated} /if (${castReturn.Equal[CAST_SUCCESS]} && !${Bool[${NetBots[${buffTarget}].Buff.Find[${buffSpellID} ]}]} && !${Bool[${NetBots[${buffTarget}].ShortBuff.Find[${buffSpellID} ]}]}) { /call CreateTimer "nht${Target.ID}-${buffSpellID}" "${noHoldDelay}" } } } else /if (${Debug} || ${Debug_BuffCheck}) /echo ~failed check_Distance~ ${buffTargetID} ${${ArrayName}[${s},${iMyRange}]} } } else /if (${Debug} || ${Debug_BuffCheck}) /echo ~Bot is not in group for groupbuff~ } else /if (${Debug} || ${Debug_BuffCheck}) /echo ~Bot has checkFoR buff~ } else /if (${Debug} || ${Debug_BuffCheck}) /echo ~Bot has buff or short buff~ } :skipBuff /doevents Follow /doevents Stop /doevents MoveHere /doevents clickit /doevents bark /doevents BackOff /doevents Assist /if (!${ActionTaken}) /next s /if (${Debug} || ${Debug_BuffCheck}) /echo <== buffBots -| /RETURN ALTERED TO SKIP IF BUFF DOES NOT STACK... Code: SUB buffBots(ArrayName) /if (${Debug} || ${Debug_BuffCheck}) /echo |- buffBots [${ArrayName}] ==> /declare s int local /declare buffTargetID int local /declare buffTarget string local /declare buffSpellID int local /declare buffCheckForID int local /declare buffSpellName string local /declare buffCheckForName string local /declare currentBuffs string local /declare currentSongs string local /for s 1 to ${${ArrayName}.Size[1]} /if (${Debug} || ${Debug_BuffCheck}) /echo buffing ${${ArrayName}[${s},${iCastName}]} on ${${ArrayName}[${s},${iCastTarget}]} checkFor ${${ArrayName}[${s},${iCheckFor}]} /if (${Select[${ArrayName},InstantBuffs2D,SelfBuffs2D]}) { /varset buffTargetID ${Me.ID} /varset buffTarget ${Me.Name} } else /if (${Select[${ArrayName},CombatBuffs2D,BotBuffs2D]}) { /varset buffTargetID ${Spawn[=${${ArrayName}[${s},${iCastTarget}]}].ID} /varset buffTarget ${${ArrayName}[${s},${iCastTarget}]} } /varset buffSpellName ${${ArrayName}[${s},${iSpellName}]} /varset buffSpellID ${${ArrayName}[${s},${iSpellID}]}] /varset buffCheckForName ${${ArrayName}[${s},${iCheckFor}]} /varset buffCheckForID ${${ArrayName}[${s},${iCheckForID}]} /if (!${Bool[${NetBots[${buffTarget}].ID}]}) /goto :skipBuff |/echo ${buffSpellName} ${buffSpellID} ${buffCheckForName} ${buffCheckForID} ${Bool[${NetBots[${buffTarget}].Buff.Find[${buffSpellID} ]}]} |/echo ${buffSpellName} ${Select["${buffSpellName}","Thief's Eyes", "Fists of Wu", "Commanding Voice","Cry Havoc"]} /if (${Select[${buffSpellID},8001,8002,8000,8003]}) { /call meleeCombatBuffs "${ArrayName}" ${s} /goto :skipBuff } |------- Self ------| /if (${Select[${ArrayName},SelfBuffs2D,InstantBuffs2D]}) { /if (!${Bool[${Me.Buff[${buffSpellName}]}]} || (${Bool[${Me.Buff[${buffSpellName}]}]} && ${Me.Buff[${buffSpellName}].Duration.TotalSeconds} <= ${buffRecastTime})) { /if (!${Bool[${Me.Song[${buffSpellName}]}]} && !${Bool[${Me.Song[${buffCheckForName}]}]}) { | --- Stacking check to bypass buff if it does not stack /if (!${Spell[${buffSpellID}].NewStacks}) /goto :skipBuff | --- Stacking check to bypass buff if it does not stack /if (${Spell[${buffSpellID}].NewStacks} && !${Bool[${Me.Buff[${buffCheckForName}]}]}) { /call check_Ready "${ArrayName}" ${s} /if (${c_Ready} && ${${ArrayName}[${s},${iIfs}]}) { /if (${check_Mana["${ArrayName}",${s}]}) { /call e3_Cast ${buffTargetID} "${ArrayName}" ${s} } } else /if (${Debug} || ${Debug_BuffCheck}) /echo ${buffSpellName} is not ready for ${buffTarget} } else /if (${Debug} || ${Debug_BuffCheck}) /echo buff does not stack, or checkfor buff exists } else /if (${Debug} || ${Debug_BuffCheck}) /echo buff or checkfor buff exists in songs } else /if (${Debug} || ${Debug_BuffCheck}) /echo buff exists with duration > 30 seconds } else { |------- Netbots ------| /if (!${Bool[${NetBots[${buffTarget}].Buff.Find[${buffSpellID} ]}]} && !${Bool[${NetBots[${buffTarget}].ShortBuff.Find[${buffSpellID} ]}]} && ${NetBots[${buffTarget}].FreeBuffSlots}>0 && ${Bool[${NetBots[${buffTarget}].InZone}]}) { /if (!${Bool[${NetBots[${buffTarget}].Buff.Find[${buffCheckForID} ]}]} && !${Bool[${NetBots[${buffTarget}].ShortBuff.Find[${buffCheckForID} ]}]}) { | --- Stacking check to bypass buff if it does not stack /if (!${Spell[${buffSpellID}].NewStacks}) /goto :skipBuff | --- Stacking check to bypass buff if it does not stack /if (!${Spell[${buffSpellID}].NewStacks}) /goto :skipBuff /if (!${${ArrayName}[${s},${iTargetType}].Equal[Single in Group]} || ${Bool[${Group.Member[${buffTarget}]}]}) { /call check_Ready "${ArrayName}" ${s} /if (${c_Ready} && ${${ArrayName}[${s},${iIfs}]}) { /if (${check_Distance[${buffTargetID},${${ArrayName}[${s},${iMyRange}]}]}) { /if (${check_Mana["${ArrayName}",${s}]}) { /call e3_Cast ${buffTargetID} "${ArrayName}" ${s} /delay 3 ${Target.BuffsPopulated} /if (${castReturn.Equal[CAST_SUCCESS]} && !${Bool[${NetBots[${buffTarget}].Buff.Find[${buffSpellID} ]}]} && !${Bool[${NetBots[${buffTarget}].ShortBuff.Find[${buffSpellID} ]}]}) { /call CreateTimer "nht${Target.ID}-${buffSpellID}" "${noHoldDelay}" } } } else /if (${Debug} || ${Debug_BuffCheck}) /echo ~failed check_Distance~ ${buffTargetID} ${${ArrayName}[${s},${iMyRange}]} } } else /if (${Debug} || ${Debug_BuffCheck}) /echo ~Bot is not in group for groupbuff~ } else /if (${Debug} || ${Debug_BuffCheck}) /echo ~Bot has checkFoR buff~ } else /if (${Debug} || ${Debug_BuffCheck}) /echo ~Bot has buff or short buff~ } :skipBuff /doevents Follow /doevents Stop /doevents MoveHere /doevents clickit /doevents bark /doevents BackOff /doevents Assist /if (!${ActionTaken}) /next s /if (${Debug} || ${Debug_BuffCheck}) /echo <== buffBots -| /RETURN
I've fully tested this change... works nice Just required: /if (!${Spell[${buffSpellID}].NewStacks}) /goto :skipBuff At self and netbot pre-array checks HOPEFULLY this can be incorporated into the E3 v7 master that Cream maintains.