• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver

Request - Please add Puller Toggle

Joined
Jan 14, 2016
RedCents
1,418¢
I use the /backoff cmd extensively, it's indispensable. However there are times when puller is in backoff mode and the grp has to fight and they do so without the benefit of the DPS from my monk. It would be great to get the same functionality as backoff but with the added functionality of normal assist hence a new Puller toggle.

Tia
 
Is the problem that your puller is on wrong mob??
And i am assuming your not running the "Puller"

You could try the /switch command. It tells your toon to reassist the MA and work on the target the MA is killing (mind it wount change the targets of the pets...or at least not quickly).
 
Instead of using /backoff which disables melee, I am requesting /puller that disables pulls but leaves melee enabled.

- - - Updated - - -

Is the problem that your puller is on wrong mob??
And i am assuming your not running the "Puller"

You could try the /switch command. It tells your toon to reassist the MA and work on the target the MA is killing (mind it wount change the targets of the pets...or at least not quickly).

No no, everything is working as intended, and I'm not having a problem. I am simply requesting a way to stop pulls (temporarily) that doesn't stop melee (which /backoff does) so that during the pause the puller will still engage if the grp gets ganked is all.

As an example, I hit /backoff when I want to stop pulls for one reason or another (say ML has near full bags and needs to sell to someone's Resupply Agent (veteran reward), or I want to take a minute and grab one of the toons to check out the spawn 'over the hill', or, I need to figure out if everyone has a no-trade lore item - I don't want pulls to be brought in while busy with stuff). What I want to solve is that if the grp gets aggro from a wanderer, or respawn, everyone fights it except the puller who is in backoff mode. Make Sense? It is a management nicety I am requesting. Essentially, in my example, /backoff might as well be /mqp (provided he was out of combat and in camp).

- - - Updated - - -

Perhaps it would help to know how I am using /backoff:
Rich (BB code):
/bct ${Group.Puller} //backoff

I use...it...all...the...time. It is a godsend! There are many many reasons why I want pulls to halt. I only wish it didn't stop melee/assist. Since that wasn't the intent of the /backoff cmd I am requesting one (/puller) that does most of what /backoff does without stopping melee/assist. Make sense? Anything I can do to aid in the management of a 6 boxed grp all running KA is worthy imho.
 
Last edited:
Pause stops melee, same as backoff. Was looking for a way for it to stop pulling BUT assist as if it had been started like /mac KA9 assist bob until I toggled pulls back on.

- - - Updated - - -

The backoff cmd sets ${DPSPaused} which is checked in the Pull, WaitForMob, Assist, Combat, CombatCast, CombatPet, CheckForAdds, DoDebuffStuff, DebuffCast, FindMobToPull routines.

I merely wanted something similar that simply excluded turning off the Combat & Assist routines. It would stop pulling but still enter combat if and when the MA entered battle. Subs Combat & Assist are the only ones I am referring to here. Hence a puller toggle.
 
you mean you want to do what a puller normally does? Pull a mob then assist the tank?
 
more of a "hold pulls" and less of a "pause all action"

like what happens if groupwatch is on, medcombat is 0 and someone is low on mana. The puller stops pulling but would still engage if the MA is in combat.

... I'll pm you an idea to test Incognito, it's not something I'd want to promote as the "right" way to do it, but it might work.
 
You know you could just "restart" KA on puller making him an assist while you are away, and then "restart" him again as puller when you get back..(just a 1 hot key add).
 
Yeah, actually tried using hotkeys to end mac and restart in assist mode, then again stopping mac and restarting back in puller mode when ready to resume. That did work, and didn't take too long. Maybe that's the way to accomplish what I'm after. I'm so used to using the toggle commands to adjust behavior on the fly was thinking it would be great to have one to toggle pulling.

- - - Updated - - -

Ya know, it might be as simple as using the built-in KA event ToggleVariable to simply switch roles from Puller to Assist, and back again. I will test this later this afternoon. I doubt the ToggleVariable event was ever intended to be used this way so if it works I probably wont make it public. If it works, I'll have to get permission to share it as it is a bit of a hack.
 
Well, you have now have put the bug in Maskoi's ear, so maybe it will become a reality...eventually.
Until then, you have a "work around" that will hopefully serve your needs till something else shows up.
 
Yeah, actually tried using hotkeys to end mac and restart in assist mode, then again stopping mac and restarting back in puller mode when ready to resume. That did work, and didn't take too long. Maybe that's the way to accomplish what I'm after. I'm so used to using the toggle commands to adjust behavior on the fly was thinking it would be great to have one to toggle pulling.

- - - Updated - - -

Ya know, it might be as simple as using the built-in KA event ToggleVariable to simply switch roles from Puller to Assist, and back again. I will test this later this afternoon. I doubt the ToggleVariable event was ever intended to be used this way so if it works I probably wont make it public. If it works, I'll have to get permission to share it as it is a bit of a hack.


That might work, but would require a little more research for me to verify for sure. but what I am understanding. What you would like is to be able to use a command line /pullpause and the puller would continue killing what ever the tank targets and starts to kill until there are no mobs left in camp, leaving everyone in group just waiting until you do /pullpause again and the puller would take off pulling again.

Is that what you are asking for?
 
Yep, that way pulling is halted but the whole grp will defend itself in the meantime.

I've started testing the ToggleVariable but have more to do. Will report back.

- - - Updated - - -

Ok that doesn't work. It might set ${Role} but there must be more to it than that particular variable. Perhaps tho that handles half the battle...
 
Yep, that way pulling is halted but the whole grp will defend itself in the meantime.

I've started testing the ToggleVariable but have more to do. Will report back.

- - - Updated - - -

Ok that doesn't work. It might set ${Role} but there must be more to it than that particular variable. Perhaps tho that handles half the battle...

I believe that toggle was set for if your "puller" had a merc out, it would turn "puller" on when out pulling and off when back at camp so your mercs would stay at camp and not follow puller out into the field.
 
Ah, you are referring to PullRoleToggle. ToggleVariable is an internal event KA uses to set/reset certain variables. Ever wonder why when using a /cmd in KA it echoes to MQ2Win THEN you see a msg that X setting is set? I found it by reading the code, not only the events, but how ToggleVariable was used throughout. It isn't all of the set/resets (some have their own events - AKA MobsToPull, Backoff, etc) but a few (camphere comes to mind) do.
 
I haven't tested this yet, but this should do it.

Add the New #Event right below the existing one.

Just change the Highlighted sections in each sub routines.

Just replace the whole Event_Backoff with the one at the bottom.

Rich (BB code):
#Event BackOff           "[MQ2] BackOff"
#Event BackOff           "[MQ2] BackOff #1#"

    Sub Assist
    /if ((${DMZ} && ${Me.InInstance}==FALSE) || (!${MeleeOn} && !${DPSOn} && !${MezOn}) || ${DPSPaused}<3 || ${Me.Hovering} || (${Pulled} && ${MyTargetID} && ${MainAssist.Equal[${Me}]})) /return

    Sub Combat
        /doevents
        /if (!${MyTargetID} || !${Target.ID} || (${DMZ} && ${Me.InInstance}==FALSE) || !${Target.LineOfSight} || ${DPSPaused}<3 || (${Select[${Role},puller,pullertank,pullerpettank]} && ${Math.Distance[${CampYLoc},${CampXLoc}]}>=${CampRadius} && ${Pulling})) /return

    Sub CombatCast
        /if (${DebugCombat}) /echo DEBUGCOMBAT CombatCast Enter
        /declare i int local 0
        /declare DPSStart int local ${Math.Calc[${DebuffCount}+1]}
        /declare DPSText string local
        /declare DPSAt int local ${AssistAt}
        /declare DPSTargetID int local ${MyTargetID}
        /declare DPSItem string local
        /for i ${DPSStart} to ${DPS.Size}       
            /doevents
            /call CombatTargetCheck
            /if (${Spawn[${MyTargetID}].Type.Equal[Corpse]} || !${Spawn[${MyTargetID}].ID}) {
                /if (${DebugCombat}) /echo CombatCast: Return from CombatCast cause my target is a corpse or dead.
                /return
            }
            /if (${DPSPaused}<3) {
                /if (${DebugCombat}) /echo CombatCast: Return from CombatCast cause DPSPaused is ${DPSPaused}
                /return
            }
            
    Sub CombatPet
        /if (${DebugCombat}) /echo DEBUGCOMBAT CombatPet: Enter
        /if (${PetAttack} || ${DPSPaused}<3) /return

    Sub CheckForAdds(CalledFrom)
        /doevents
        /if (${Debug}) /echo  DEBUG  CheckForAdds: Enter from ${CalledFrom}
        /call MobRadar ${MeleeDistance} CheckForAdds
        /if (${Debug}) /echo DEBUG MobCount:${MobCount}
        | If no mobs, in a DMZone or pulling Leave
        /if (${MobCount}<=1 || (${DMZ} && ${Me.InInstance}==FALSE)|| ${Pulling} || (!${DPSOn} && !${MeleeOn}) || (${Select[${Role},puller,pullertank,pullerpettank]} && ${Math.Distance[${CampYLoc},${CampXLoc}]}>=${CampRadius}) || ${IAmDead})  /return        
        /if (${ChainPull}==2 || ${DPSPaused}<3) /return


Sub DoDebuffStuff(int FirstMobID)
    /if (${DebugCombat}) /echo DEBUGDEBUFF DoDebuffStuff: Enter
    /doevents
    /if (!${DebuffAllOn} || !${DebuffCount} || ${Window[RespawnWnd].Open} || (${DMZ} && ${Me.InInstance}==FALSE) || (!${MyTargetID} && ${Spawn[=${MainAssist}].ID} && ${Spawn[=${MainAssist}].Type.NotEqual[Mercenary]})) /return
    |/if (${Role.Find[tank]}) /return
    /if (${DPSPaused}<3) {
       /if (${DebugCombat}) /echo DoDebuffStuff: Return from CombatCast cause DPSPaused is ${DPSPaused}
       /return
    }
    /declare i               int      local 0
    /declare j               int      local 0
    /declare k               int      local 0
    /declare DebuffTargetID  int      local 0
    /declare DebuffText      string   local

    /if (${IAmABard} && ${MainAssist.Equal[${Me}]} && ${MyTargetID} && ${AggroTargetID}) {
       /if (${DebugCombat}) /echo im a bard and stuff so im getting out of here. Returning
       /return
    }
    /call MobRadar ${MeleeDistance} DoDebuffStuff
    /for i 1 to ${DebuffCount}
       /if (${DBOList${i}.Length}) {
          /varset k 1
          /if (!${DBOTimer${i}}) {
              | Reset the list with only the current DPS mob ID. So you won't try and debuff the mob again.
             /varset DBOList${i} |${MyTargetID}
          } else {
             |Remove mobs from list that are dead or over 200 units away.
             /while (${DBOList${i}.Arg[${k},|].Length}) {
                /if (!${Spawn[${DBOList${i}.Arg[${k},|]}].ID} || ${Spawn[${DBOList${i}.Arg[${k},|]}].Distance}>200 || ${Spawn[${DBOList${i}.Arg[${k},|]}].Type.Equal[Corpse]}) {
                   /varset DBOList${i} ${DBOList${i}.Replace[|${DBOList${i}.Arg[${k},|]},]}
                } else {
                   /varcalc k ${k}+1
                }
             }
          }
       }
    /next i
    | For Mobs
    /if (${DebugCombat}) /echo MobCount was ${MobCount} MainAssist: ${MainAssist} FirstMobID: ${FirstMobID} MyTargetID: ${MyTargetID}
    /call DebuffCast "${FirstMobID}" 1
    /for j 1 to 13
       |--- only call code for GroupEscape kick off.
       /if (${GroupEscapeOn} && ${Select[${Me.Class.ShortName},WIZ,DRU]} && (${Raid.Members}==0)) /call GroupEscape
       |/if (${MezOn}) /call DoMezStuff
       |/if (${HealsOn}) /call CheckHealth
       |/if (${CuresOn}) /call CheckCures
       /if (${DPSPaused}<3) {
          /if (${DebugCombat}) /echo DEBUGCOMBAT DoDebuffStuff: Return from CombatCast cause DPSPaused is ${DPSPaused}
          /return
       }

       
Sub DebuffCast(int DebuffTargetID, int FWait)
    /declare c               int      local 0
    /declare f               int      local 0
    /declare g               int      local 0
    /declare i               int      local 0
    /declare DebuffText      string   local
    /declare TempTimer       timer    local 0
    /declare Tag1            string   local
    /declare Tag2            string   local 
    /declare echoTimer       timer    local 0
    | ****************  For Spells  *****************************
    /if (${DebugCombat}) /echo DebuffCast Enter.
    | g  - is control variable for remaining in loop while checking for mobs to debuff and spell is ready to cast.
    | c  - is to tell if the current mob is NOT on the Debuffed List or the debufftimer has runout. c=1 mob needs debuff, c=0 Mob can be skipped
    | f  - is a flag that is changed if we find a mob to debuff, but the current Spell or AA is not ready for casting, f=1 Spells/AA's were ready, f=0 Spell/AA not ready.
    | i  - is the index of the debuff to cast.
    | !${c} This mob has all debuffs, !${f} There is a debuff that was not ready for this mob.
    /while (1) {
       /varset TempTimer 70
       /varset g 1
       /while (${g} && ${TempTimer}) {
          /varset c 0
          /varset f 1
          /if (${i}==${DebuffCount}) /varset i 0
          /while (${f} && ${i}<${DebuffCount}) {
             /varcalc i ${i}+1
             /varset DebuffText ${DPS[${i}].Arg[1,|]}
             /if (${DebugCombat}) /echo ${DPS[${i}].Length}  ${DebuffText.NotEqual[null]} ${DBOList${i}.Find[|${DebuffTargetID}]} ${DBOTimer${i}} ${i} ${DebuffCount} ${TempTimer}
             |If mob not on list or debuff timer expired then increment counter of mobs needing debuff.
             /if (${DPS[${i}].Length} && ${DebuffText.NotEqual[null]} && (!${DBOList${i}.Find[|${DebuffTargetID}]} || !${DBOTimer${i}})) {
                /varset c 1
                | is spell or AA ready to cast? If ready set flag to drop out of loop.
                /if (${Select[TRUE,${Me.SpellReady[${DebuffText}]},${Me.AltAbilityReady[${DebuffText}]}]}) {
                   /varset f 0
                } else {
                   /if (${FWait} && !${echoTimer}) {
                      /if (${Me.SpellInCooldown}) {
                         /if (${Int[${Me.Gem[${DebuffText}]}]}) {
                            /if (!${Me.GemTimer[${DebuffText}]}) {
                               /echo Waiting on Spell Global Cool Down To Cast ${DebuffText}
                               /varset echoTimer 3s
                            }
                         }
                      } else /if (${Int[${Me.Gem[${DebuffText}]}]} && ${Me.GemTimer[${DebuffText}]}) {
                         /echo Waiting on Spell: ${DebuffText} to Refresh. Time Remaining: ${Me.GemTimer[${DebuffText}].TotalSeconds} Seconds.
                         /varset echoTimer ${Me.GemTimer[${DebuffText}]}
                      }
                   }
                }
             }
          }
          /if (!${c} || !${f} || (${f} && !${FWait})) /varset g 0 
       }
       /if (${DebugCombat}) /echo DEBUGCOMBAT DebuffCast 0 DebuffTargetID: ${DebuffTargetID} ${i} C: ${c} F: ${f} FWait: ${FWait}
       /doevents
       /if (${DPSPaused}<3) {
          /if (${DebugCombat}) /echo DebuffCast: Return from CombatCast cause DPSPaused is ${DPSPaused}
          /return
       }
       
    Sub Event_BackOff(Line, int KillMobsInCamp)
        /if (${DPSPaused}) {  
            /if ((${DPSPaused}==2 || ${DPSPaused}==4) && ${UseMQ2Melee}) /squelch /melee on
            /varset DPSPaused 0  
            /echo Resetting. No Longer Backing off.  
        } else {  
            /varset DPSPaused 1  
            /if (${Melee.Combat} || ${Me.Combat}) {  
                /varset CombatStart 0  
                /if (${UseMQ2Melee}) /squelch /melee off
                /squelch /attack off  
                /call CombatReset  
                /varset DPSPaused 2 
                /if (${Stick.Active})  /stick off 
            }  
            /echo Backing off - All Combat has been reset.
        }  
        /if (${ReturnToCamp} && ${Math.Distance[${CampYLoc},${CampXLoc}]}>10) {  
            /call DoWeMove  
        }
        /if (${KillMobsInCamp} && ${DPSPaused}) /varcalc DPSPaused ${DPSPaused}+2 
        /doevents flush Event_BackOff  
    /return 

use /backoff 1 to stop from pulling, but to keep killing all mobs in camp. /backoff will start pulling again. /backoff still should work as it does now..

I set this up so it will function the same on all group members. /backoff 1 will let your nukers, debuffers, and melee keep killing any mob in camp. Use /backoff to get everything back to normal.
 
Initial test resulted in no difference (meaning toon did not assist grp while in Backoff 1 mode). I will have to perform more tests. My grp has been in the field all this time grinding, when I can bring them home I will do some more substantial testing.

- - - Updated - - -

I still need to go thru the code changes with more scrutiny, just wanted to give an update. With the mods in place I noticed a residual affect. While in regular pull mode (not in either backoff mode), toon does not assist additional XTars after helping with the first one (either adds or coming out of mez). Like it thinks it is in backoff. More testing required.

- - - Updated - - -

As an aside; It might be easier to think of an elegant (read not a hack) method of switching from PULLER to ASSIST and back. All of the code for both are already there, just need to switch between the two without having to shut down and restart KA (which is what I do now). Problem for me with shutting down and relaunching is that there are a number of settings not set to ON in the INI, so I can set them on the fly in the field (which I like). So relaunching in another 'mode' in a crisis setting isn't always straightforward.
 
Thanks for the update. What you need to check for is if DPSPaused is getting set to 3 or 4 when using /backoff 1. if it is not then check and make sure you have the event trigger added in the top of the macro and see if it is actually being executed. you should still see the message about backing off.
 
Initial results are good CT, thx! I will test more thoroughly but upon using the new backoff setting I was able to grab another toon and pull something into camp and the MA addressed it perfectly, all the while holding off pulling (MA was PullerTank in this regard). This just might do the trick and enable the grp to survive aggro while Puller is in backoff mode. I have to test it with a pure puller still.

DPSPaused is indeed 3, and the normal /backoff resets it to 0. All seems well!

- - - Updated - - -

I/we did break =0 though. Pullertank will pull a mob and not engage it. I will troubleshoot.

- - - Updated - - -

Hmmm, 0 (which is not set - all good to go) is < 3, might have to make all the < 3 checks exclude 0. Working on it.

- - - Updated - - -

Ok, everywhere we had ${DPSPaused}< 3 I went with (${DPSPaused}< 3 && !${DPSPaused}==0).

I will post all the mods like you did above later tonight. There might be a more elegant way to check in set[0, < 3] but I wouldn't know the MQ2 syntax. We can work out the details. I am testing now and so far 0, 1, and 3, and the resetting event all seem to be working.
 
FWIW: I have been using this mod for a month now, and it fricken rocks! I use it extensively! It essentially allows me to switch between puller mode and tank mode (thus defending camp). This is substantially better than any kind of pause, or the original /backoff. I maintain that the grp needs to be able to effectively defend itself at all times or you might as well hit /end, stand there, and die.

This is the single-most important KA mod for me and I again appeal to those who like to hand out big lipped avatars to include this or something like it in the main release. The reason, as I have stated above, is that the grp should defend itself at all times. I can see no reason, if you are running KA, that you would want the grp to die. This mod essentially equates to ending KA and restarting in tank mode, albeit faster, cleaner, neater, and should be a part of KA IMHO.

- - - Updated - - -

And yes, I have ported it to 9.7 and it works flawlessly.

Oh, and I am LOVING 9.7, just started using it, and it rocks!
 
Oddly enough, KA 9.81 seems to handle /varset Role Tank and /varset Role PullerTank really well. I am pretty sure I had tried that before in previous KA versions prior to ever posted anything about wanting to toggle pulling.

To recap:
  • Start KA as PullerTank.
  • To switch to Tank (stop pulling) use /varset Role Tank. This stop pulling while maintaining camp defense.
  • To switch back to pulling use /varset Role PullerTank and pulling will commence.

I only tried the varset on a whim since I had just switched to KA 9.81 and I wanted to avoid having to re-code the mods mentioned previously in this thread (among others I have found ways to avoid). I was surprised how well it worked. Now more testing is required, it may not immediately stop if pulling has started, however I do notice that somewhere in the pull cycle there is an XTar check and pulling has aborted using the varset method (thus returning to camp and either waiting for something to aggro the camp, or I turn pulling back on).
 
Request - Please add Puller Toggle

Users who are viewing this thread

Back
Top
Cart