• 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

Question - Faster Pulls with KA??

bmars06

Well-known member
Joined
Mar 8, 2019
RedCents
739¢
Hey Guys,

I'm still relatively new with this so trying to get it set up for my 6-box group. As it is set right now, my tank (SK) will pull a mob back to where the group is, the group will kill it, the tank will then run to where his "camp" spot is (which is usually right next to where he pulled to mob back to), wait a few seconds, and then target another mob to pull.

Is there a way to make him pull a little faster? Ideally, I would like to see him target a mob and pull it immediately after the mob he is fighting dies. Any tweaks I can make?

Thanks in advance!
 
set ReturnToCamp=0 in you ini might work. you can also do
Code:
/returntocamp off
in the client
 
Sometimes the delay can be caused by "a target rich environment". In other words make sure you aren't using too large a pull radius. I'm not sure how it does the targeting selection but I've found that a smaller pull radius works faster.
 
You can look at the chain pull options also, however puller tank role and non fleeing mobs means won't be much of a chain happening. Any other char in group able to pull?
 
You can look at the chain pull options also, however puller tank role and non fleeing mobs means won't be much of a chain happening. Any other char in group able to pull?

Yea, I have a full Conflag geared monk that could probably pull... just not sure how well that works with KA as in does monk FD and SK picks up the mobs or what?
 
It depends on what happens I guess... Ideally the monk goes to pull and the last mob dies as the monks mob is Inc to camp... But it will all highly depend on settings/group dps/pull distance... It may never be perfect like a player, but it should speed up pulls
 
Chain pulling with a monk sounds like what you want. You will need to tweak a few things to get it to work close to what you want.

Here are the entries that you will want to play with:
ChainPull=1 - turns on chain pulling.
ChainPullHP=90 - Hp Level to check on the current mob to find another mob to pull.

Do NOT make the puller the MainAssist. Make your tank the MainAssist. Turn on GroupWatch on your monk/puller and turn Off GroupWatch on all other characters.

The puller will NOT pull the next mob if that mob is more than 400 units from camp, this is to make sure the puller gets experience if the mob in camp dies while the puller is out pulling. Now if you don't care about the puller getting EXP, then you can turn off that check, by setting PullXPCheck off.

Set a hotkey with the following:

/togglevariable PullXPCheck 0

Once you get Kiss up and running on your puller just click your hotkey to turn off exp check.
 
I have been continuously updating and tweaking my monk script-- and added in some important parts from ctaylor's updated Kis11 and incorporates brainiacs "distance" changes to MQ2Nav. They are tweaks and efficiency changes, so don't hold your breath-- the current 'feign' routine for splitting is exactly the same.

I'm super busy at work, Spring is here in California and there's a shitload to do here on the "farm"-- so will take a week or so to make sure I test the changes properly so I don't give people a ball of crap that needs multiple acute fixes. :)
 
I personally modified my KA to use my Farm.mac's logic for pulling adding in the checks that KA does to validate a target. The reason I did this goes back to what @B_I_G__D_A_D_D_Y mentioned, to deal with target rich environments. I've limited to maximum targets to compare distances to 200, and I've removed the 3 for loops that KA uses and broke it down to only use a single for loop instead. Using my current method I'm sure breaks chain pull logic because the macro will only get the nearest valid spawn and won't get the second nearest, though it's possible that adding the mob to the alert list would allow chain pull to work in the same manner that it currently does, the change I made simply replaces the FindMobNav function with my own function.

Code:
Sub TargetShortest(int PFlag, int BCount, int ECount, string PRole)
    /declare searchstring string local ""
    /declare searchstring2 string local ""
    /if (${PRole.Find[hunter]}) {
        /noparse /varset searchstring ${i}, npc loc ${Me.X} ${Me.Y} radius ${MaxRadius} zradius ${MaxZRange} targetable noalert 1
        /noparse /varset searchstring2 loc ${Spawn[id ${PullMob}].Y} ${Spawn[id ${PullMob}].X} ${Math.Calc[${Spawn[id ${PullMob}].Z}-${Spawn[id ${PullMob}].Height}/2]}
    } else {
        /noparse /varset searchstring ${i}, npc loc ${CampXLoc} ${CampYLoc} radius ${MaxRadius} zradius ${MaxZRange} targetable noalert 1
        /noparse /varset searchstring2 loc ${Spawn[id ${PullMob}].Y} ${Spawn[id ${PullMob}].X} ${Math.Calc[${Spawn[id ${PullMob}].Z}-${Spawn[id ${PullMob}].Height}/2]}
    }
    /declare PullTargetID int local 0
    /declare Shortest int local 0
   
    /if (!${Me.XTarget[1].ID}) {
        /if (${PRole.Find[hunter]}) {
            /declare MobsInRange int local ${SpawnCount[npc loc ${Me.X} ${Me.Y} radius ${MaxRadius} zradius ${MaxZRange} targetable noalert 1]}
        } else {
            /declare MobsInRange int local ${SpawnCount[npc loc ${CampXLoc} ${CampYLoc} radius ${MaxRadius} zradius ${MaxZRange} targetable noalert 1]}
        }
        /declare i int local 0
        /declare j int local 1
        /if (${MobsInRange}) {
            /if (${MobsInRange} > 200) {
                /if (${DebugPull}) /echo There were more than 200 mobs in range, cutting down the list.
                /varset MobsInRange 200
            }
        |** PullList[#,1] = ID of mob, PullList[#,2] = PathLength **|
            /declare PullList[${MobsInRange},2] int local 0
            /for i 1 to ${MobsInRange}
                /if (${NearestSpawn[${searchstring}].Name.NotEqual[NULL]}) {
                    /varset PullMob ${NearestSpawn[${searchstring}].ID}
                    /call PullValidate ${PullMob} ${PFlag}
                    /if (${Macro.Return}) {
                        /varset PullList[${j},1] ${NearestSpawn[${searchstring}].ID}
                        /varset PullList[${j},2] ${Int[${Navigation.PathLength[id ${NearestSpawn[${searchstring}].ID}]}]}
                        /if (${j}==1) {
                            /varset PullTargetID ${PullList[${j},1]}
                            /varset Shortest ${PullList[${j},2]}
                        } else /if (${PullList[${j},2]} < ${Shortest}) {
                            /if (${DebugPull}) /echo \awShortest was: \ar[\ay${PullTargetID}\ar] \ap${Spawn[${PullTargetID}].Name} \aw- Dist: \ar${Navigation.PathLength[id ${PullTargetID}]} \awNow: \ar[\ay${PullList[${j},1]}\ar] ${Spawn[${PullList[${j},1]}].Name}\aw- Dist: \ag${Navigation.PathLength[id ${PullList[${j},1]}]}
                            /varset PullTargetID ${PullList[${j},1]}
                            /varset Shortest ${PullList[${j},2]}
                           
                        }
                        /varcalc j ${j}+1
                    } else {
                        /if (${DebugPull}) {
                            /squelch /echo \at${NearestSpawn[${searchstring}].Name} was not a valid pull target.
                            /squelch /echo \ar${Navigation.PathExists[id ${NearestSpawn[${searchstring}].ID}]} && ${Int[${NearestSpawn[${searchstring}].Distance3D}]} <= ${Int[${Navigation.PathLength[id ${NearestSpawn[${searchstring}].ID}]}]}
                        }
                    }
                }
            /next i
            /if (${PullTargetID}) {
                /echo \arPull Target: \ax[\ar${Spawn[id ${PullTargetID}].ID}\aw]\ap ${Spawn[id ${PullTargetID}].Name} - \awDist: \ay${Navigation.PathLength[id ${PullTargetID}]} \awRadial Distance: \ay${Spawn[id ${PullTargetID}].Distance3D}
                /varset PullMob ${PullTargetID}
                /return ${PullMob}
            }
        }
    } else /if (!${Me.XTarget[${XTSlot}].Type.Equal[Corpse]}) {
        /varset PullMob ${Me.XTarget[${XTSlot}].ID}
        /return ${PullMob}
    }
/return

Where I replace the call to FindMobNav with the following.

Code:
| Find a mob based on pull method.
            /if (${PullMoveUse.Equal[nav]} && ${Select[${Role},hunter1,hunterpettank]}==0) {
                /call TargetShortest ${ReadyToPullFlag} ${NearestIgnore} ${PullCount}
            } else /if (${Select[${Role},hunter1,hunterpettank]} && ${Select[${PullMoveUse},nav]}>=1) {
                /call TargetShortest ${ReadyToPullFlag} ${NearestIgnore} ${PullCount} hunter
            } else /if (${PullMoveUse.NotEqual[advpath]}) {
                /call FindMobLOS ${ReadyToPullFlag} ${NearestIgnore} ${PullCount}
            }
            /if (!${PullMob}) /varset ChainPullTemp 0

You may or may not notice that I am still using the parameters to call the sub, but don't actually use all the paramaters in the function itself. I use the PFlag when I validate, and I use the PRole to know which searchstring to use.

MAKE A BACKUP OF YOUR KA file!
This expedites the pulling routine for me for at least deciding which mob to find and makes hunter mode a lot quicker for me as I set my radius really high and often times in it's existing state that causes KA to want to check every single mob in the zone.
You can effectively paste my subroutine to the bottom of KissAssist, and then change the "Find a mob based on pull method" part with the calls to the new function. Hope someone finds this useful.
 
Last edited:
Question - Faster Pulls with KA??

Users who are viewing this thread

Back
Top
Cart