• You've discovered RedGuides 📕 an EverQuest multi-boxing community 🛡️🧙🗡️. We want you to play several EQ characters at once, come join us and say hello! 👋
  • IS THIS SITE UGLY? Change the look. To dismiss this notice, click the X --->
  • Unfortunately, yes, there is a suspension wave happening around the new tlp launch. :'( Please keep regular discussion to Suspension MegaThread and please consider submitting a Suspension report to RG.

Pull.mac Help (1 Viewer)

nyghteyes

What is a macro??
Joined
Mar 21, 2006
RedCents
1,437¢
Ok I have given up on the advpath puller for now. I have been using just the standard pull.mac that I added buff arrays from the older mac I was having problems with on pathing.

I would like it to stop a given distance away from the mob and cast an aggro spell. Instead of going up and attacking the mob.


Rich (BB code):
Sub Pull
   /doevents 
   /echo Pulling Mob 
   /declare TargDist float local 
   :PullLoop 
      /doevents 
      /if (!${Me.Combat}) /attack on 
      /call MoveToMob 
      /if (!${Target.ID}) /return 
      /face fast 
      /if (${Target.PctHPs}==100) /goto :PullLoop 
      /if (${Target.PctHPs}<21) /return 
      /call MoveToLoc ${RT_MyyLOC} ${RT_MyXLOC} 
      /if (!${Target.ID}) /return 
      /face fast 
   :Engage 
      /varset TargDist ${Math.Distance[${Target.Y},${Target.X},0:${Me.Y},${Me.X},0]} 
      /if ( ${TargDist}<30 ) /return 
      /delay 1s 
      /goto :Engage 
/return

What would I want to change the Engage loop too?

Any help would be great. Thanks

Heres the rest of it.

Rich (BB code):
| Pull Macro 
| Pull.mac 
| Author      : robdawg :Ripped by Jdelpheki :Ripped Again By hakcenter 
| Version     : v3 2004-12-16 5:50pm PST 
| Useage      : /macro pull 
| Description : This macro will run your character around Pulling any mobs. 
|      This is definitely a work in progress and I am sure 
|      someone can think of plenty of upgrades for this. 
| : Ripped section Jdelpheki 
|      Modified for pull to area where Macro is started.  I have been using this 
|      2 level 45's Cleric Running genbot and Warrior running Pull2.  Ran for 4 hours 
|      Max with one cleric death. Needs Throwing weapon or arch support too 
|      Needs Genbot to announce its getting hit or get a new cleric script 
| : Ripped section hakcenter 
|      Pulls Any Mobs within radius (regardless of level) 
|      No Mob Array Required 
|      Looting Added 
|      *Looting -stuck on corpse bug fixed- 
|      Loot Table Array Support 
|      *Puller runs to pull spot after mob looting is finished 
|      *Removed Target Fail Counters 
|      *Checks for mobs every 30seconds, 1second 50radius checks 
|      *Reformated 
|      *On zoning(death whatever), quits everquest 
|      *Added more checks 
| 
|      2004-12-11 
| 
|      Added some squelching, always looking for mobs within range, 5 distance intervals 
|      Jacked Item Coding from Rogue Helper 
|      Fixed UI locking up 
|      Fixed Long Buff Casts 
|      Added Disarm to the Special Combat abilities 
| 
|      2004-12-16 
|      Revamped Close mob checking to 0.1second 100radius squelched 
|      Revamped Item casting to check for local mobs during.. and interupt if mob is near 100radius 
|      Removed mass escaping.. cause its retarded 
|      Fixed cool errors when accidently pushing esc while on a mob 
|      Fixed cool errors when accidently pushing esc while pulling a mob 
|      Added 1second before first item cast, incase item is worn... you get interupted cause its too fast 
| 
|------------------------------------------------------------------------------------ 

#turbo 10 
#Event Slain "#*# slain#*#" 
#Event Zoned "LOADING, PLEASE WAIT..." 


Sub Main 

   |------------------------------------------------------------ 
   |How far would you like to target a mob? 
   |------------------------------------------------------------ 
   /declare RV_MaxRadius        int outer  450 
   |------------------------------------------------------------ 
   |How far is the fast movement range? 
   |------------------------------------------------------------ 
   /declare RV_FastRange        int outer  10 
   |------------------------------------------------------------ 
   |How far is the maximum combat range? 
   |------------------------------------------------------------ 
   /declare RV_RangeMax         int outer  7 
   |------------------------------------------------------------ 
   |How far is the minimum combat range? 
   |------------------------------------------------------------ 
   /declare RV_RangeMin         int outer  8 
   |------------------------------------------------------------ 
   |What is the minimum Z Value of mobs I should target? 
   |------------------------------------------------------------ 
   /declare RV_MinZRange        int outer  -1000 
   |------------------------------------------------------------ 
   |What is the maximum Z Value of mobs I should target? 
   |------------------------------------------------------------ 
   /declare RV_MaxZRange        int outer  450 
   |------------------------------------------------------------ 
   |Loot Array Information. 
   |------------------------------------------------------------ 
   /call ReadINI PullLoot.ini "${Zone.Name}" Loot 
   /if (!${Defined[RV_LootArray]}) { 
      /echo No Loot Array Created... 
   } 


/declare LeechTouchPct       string outer 25

/declare LifeTapSpell       string outer "Touch of Severan Rk. II"
/declare LifeTapGem         string outer gem1
/declare LifeTapPct         string outer 65

/declare GroupTapSpell       string outer "Blackwater Bite Rk. II"
/declare GroupTapGem         string outer gem2
/declare GroupTapPct         string outer 80

/declare SKepic            string outer "Innoruuk's Dark Blessing"
/declare SKepicGem         string outer item
/declare SKepicPct         string outer 38

/declare PullSpell         string outer "Challenge for Power Rk. II"
/declare PullGem           string outer gem4

/declare AggroSpell        string outer "Vilify"
/declare AggroGem          string outer gem7

/declare Buff1             string outer "Grim Covenant Rk. II"
/declare Buff1Gem          string outer gem9
/declare Buff1IconName     string outer Grim Covenant Rk. II

/declare Buff2             string outer "Cloak of Corruption"
/declare Buff2Gem          string outer gem8
/declare Buff2IconName     string outer Cloak of Corruption

/declare Buff3             string outer "Shroud of the Gloomborn RK. II"
/declare Buff3Gem          string outer gem8
/declare Buff3IconName     string outer Shroud of the Gloomborn RK. II

/declare Buff4             string outer "Bobbing Corpse"
/declare Buff4Gem          string outer gem8
/declare Buff4IconName     string outer Bobbing Corpse

/declare Buff5             string outer "Soulthirst Horror"
/declare Buff5Gem          string outer gem8
/declare Buff5IconName     string outer Soulthirst Horror

/declare Buff6             string outer "Stonewall Pauldrons"
/declare Buff6Gem          string outer item
/declare Buff6IconName     string outer Form of Defense I

/declare Buff7             string outer "Remorseless Demeanor Rk. II"
/declare Buff7Gem          string outer gem8
/declare Buff7IconName     string outer Remorseless Demeanor Rk. II



   |------------------------------------------------------------ 
   |Variables that you don't need to worry about. 
   |------------------------------------------------------------ 
   /declare RV_MyTargetID       int outer  0 
   /declare RV_MyTargetName     string outer 
   /declare RV_MyTargetDead     int outer  0 
   /declare RV_InvalidTargetID  int outer  0 
   /declare RV_HasTarget        int outer  0 
   /declare RV_RandomWait       int outer  0 
   /declare RV_LootSlot         int outer  0 
   /declare RV_CheckLook        int outer  0 
   /declare RV_Fighting         int outer  0 
   /declare RV_TargetDead       int outer  0 
   /declare RV_MyXLOC           int outer  0 
   /declare RV_MyYLOC           int outer  0 
   /declare RV_ObstacleCount    int outer  0 
   /declare RV_hitcount         int outer  0 
   /declare RV_healcheck        int outer  0 
   /declare RT_MyXLOC           int outer  ${Me.X} 
   /declare RT_MyyLOC           int outer  ${Me.Y} 

 

   :Start 
      /doevents 
      /call GMCheck 
      /call GetTarget 
      /if (${RV_HasTarget}) /call Pull 
      /if (${RV_HasTarget}) /call CombatSub 
      /call ResetSub 
      /call MoveToLoc ${RT_MyyLOC} ${RT_MyXLOC} 
      /goto :Start 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Reading from an INI File 
|-------------------------------------------------------------------------------- 
Sub ReadINI(FileName,Loot,ArrayType) 
   /echo Attempting to Read Information from ${FileName}... 
   /declare nValues     int local  1 
   /declare nArray      int local  0 
   /declare KeySet      string local  ${Ini[${FileName}]} 
   /if (${Ini[${FileName},Loot,-1,NO].Equal[NO]}) { 
      /echo "${SectionName}" is not a Valid Section for FILE:${FileName}, ending macro... 
      /delay 1s 
      /return 
   } 
   :CounterLoop 
      /if (${String[${Ini[${FileName},Loot,${ArrayType}${nValues}]}].Equal[null]}) { 
         /varcalc nValues ${nValues}-1 
         /goto :MakeArray 
      } 
      /varcalc nValues ${nValues}+1 
      /goto :CounterLoop 
   :MakeArray 
      /if (!${nValues}) /return 
      /if (${FileName.Equal["PullLoot.ini"]}&&${nValues}>0) { 
         /echo Declaring Loot Array... 
         /declare RV_LootArray[${nValues}]  string outer 
         /declare RV_LootStats[${nValues}]  string outer 
      } 
      /for nArray 1 to ${nValues} 
      /if (${FileName.Equal["PullLoot.ini"]}) { 
         /varset RV_LootArray[${nArray}] ${Ini[${FileName},Loot,${ArrayType}${nArray}]} 
         /varset RV_LootStats[${nArray}] 0 
      } 
      /next nArray 
      /echo Information Read Successfully from ${FileName}... 
      /delay 1s 
/return 

|-------------------------------------------------------------------------------- 
|SUB: GM Check 
|-------------------------------------------------------------------------------- 
Sub GMCheck 
   /if (${Spawn[gm].ID}) { 
      /beep 
      /beep 
      /beep 
      /echo GM has entered the zone! 
      /echo FUCK HIM but ending the macro... 
      /keypress forward 
      /keypress back 
      /quit 
      /endmacro 
   } 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Aquire Target 
|-------------------------------------------------------------------------------- 
Sub GetTarget 
   /doevents 
   /declare SpawnTimer         int local 
   /declare RV_CurrentRadius   int local 
   /declare RV_TargetSub       int local 
   /echo Looking for Close Range Mobs 
   :Acquire 
      /doevents 
      /for RV_CurrentRadius 100 to ${RV_MaxRadius} step 5 
      /squelch /target radius ${RV_CurrentRadius} npc 
      /varset RV_MyTargetID ${Target.ID} 
      /varset RV_MyTargetDead 0 
      /if (${Target.ID}) { 
         /if (${Int[${Target.Z}]}<${RV_MinZRange}) { 
            /echo Mob is BELOW Min Z Range, picking another... 
            /varset RV_InvalidTargetID ${Target.ID} 
            /call ResetSub 
            /goto :Acquire 
         } 
         /if (${Int[${Target.Z}]}>${RV_MaxZRange}) { 
            /echo Mob is ABOVE Max Z Range, picking another... 
            /varset RV_InvalidTargetID ${Target.ID} 
            /call ResetSub 
            /goto :Acquire 
         } 
         /varset RV_HasTarget 1 
         /varset RV_MyTargetName ${Target.Name} 
         /echo Acquired ${Target.Name} at range ${Int[${Target.Distance}]} 
         /return 
      } 

      /next RV_CurrentRadius 
      /goto :Acquire 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Pull 
|-------------------------------------------------------------------------------- 
Sub Pull 

      /if (!${Me.Buff[${Buff1IconName}].ID} && !${Me.Combat}) /call cast ${Buff1} ${Buff1Gem}
      /if (!${Me.Buff[${Buff2IconName}].ID} && !${Me.Combat}) /call cast ${Buff2} ${Buff2Gem}
      /if (!${Me.Buff[${Buff3IconName}].ID} && !${Me.Combat}) /call cast ${Buff3} ${Buff3Gem}
      /if (!${Me.Buff[${Buff4IconName}].ID} && !${Me.Combat}) /call cast ${Buff4} ${Buff4Gem}
      /if (!${Me.Buff[${Buff5IconName}].ID} && !${Me.Combat}) /call cast ${Buff5} ${Buff5Gem}
      /if (!${Me.Buff[${Buff6IconName}].ID} && !${Me.Combat}) /call cast ${Buff6} ${Buff6Gem}
      /if (!${Me.Buff[${Buff7IconName}].ID} && !${Me.Combat}) /call cast ${Buff7} ${Buff7Gem}
      /if (!${Me.Buff["Elixir of Speed X"].ID}) /potionbelt Activate 2
     
      /if (${Me.PctMana}<35) {
        /echo Regen for 3 minutes.
        /sit
        /delay 180s
        /stand
        }

   /doevents 
   /echo Pulling Mob 
   /declare TargDist float local 
   :PullLoop 
      /doevents 
      /if (!${Me.Combat}) /attack on 
      /call MoveToMob 
      /if (!${Target.ID}) /return 
      /face fast 
      /if (${Target.PctHPs}==100) /goto :PullLoop 
      /if (${Target.PctHPs}<21) /return 
      /call MoveToLoc ${RT_MyyLOC} ${RT_MyXLOC} 
      /if (!${Target.ID}) /return 
      /face fast 
   :Engage 
      /varset TargDist ${Math.Distance[${Target.Y},${Target.X},0:${Me.Y},${Me.X},0]} 
      /if ( ${TargDist}<30 ) /return 
      /delay 1s 
      /goto :Engage 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Move to Mob 
|-------------------------------------------------------------------------------- 
Sub MoveToMob 
   /doevents 
   /varset RV_MyXLOC ${Int[${Me.X}]} 
   /varset RV_MyYLOC ${Int[${Me.Y}]} 
   /varset RV_ObstacleCount 0    
   :MovementLoop 
      /doevents 
      /if (!${Target.ID}) /return 
      /face fast 
      /varcalc RV_ObstacleCount ${RV_ObstacleCount}+1 
      /if (${Int[${Target.Distance}]}>${RV_FastRange}) /keypress forward hold 
      /if (${Int[${Target.Distance}]}<${RV_FastRange}&&${Int[${Target.Distance}]}>${RV_RangeMax}) /keypress forward 
      /if (${Int[${Target.Distance}]}<${RV_RangeMin}) /keypress back 
      /if (${RV_ObstacleCount}>=15) { 
         /call CheckObstacle 
         /goto :Movementloop 
      } 
      /if (${Int[${Target.Distance}]}>${RV_FastRange}) /goto :MovementLoop 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Move To Location 
|-------------------------------------------------------------------------------- 
Sub MoveToLoc(MoveToY, MoveToX) 
   /doevents 
   /declare running int local 
   /declare distanceNow float local 
   /declare distanceBefore float local 
   /declare distanceModifier int local 
   /declare distanceTimer timer 15 
   /varset running 0 
   /varset distanceBefore ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]} 
   /varset distanceModifier 1 
   /echo Moving to Location: ${MoveToY}, ${MoveToX}. 
   /echo Distance: ${distanceBefore} 
   :moveToLocation 
      /doevents 
      /face fast nolook loc ${MoveToY},${MoveToX} 
      /if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}<10) { 
         /keypress forward 
         /return 
      } 
      /if (${distanceTimer}==0) { 
         /if (${Me.Sneaking}) { 
            /varset distanceModifier 2 
         } else { 
            /varset distanceModifier 1 
         } 
         /varset distanceNow ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]} 
         /if (${Math.Calc[${distanceBefore}-${distanceNow}]}<${Math.Calc[10/${distanceModifier}]}) { 
         /call HitObstacle 
         } 
         /varset distanceBefore ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]} 
         /varset distanceTimer 15 
      } 
      /if (${running}==0) { 
         /keypress forward 
            /if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}>10) { 
               /varset running 1 
               /keypress forward hold 
            } 
      } else { 
         /if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}<11) { 
            /varset running 0 
            /keypress forward 
         } 
      } 
      /goto :moveToLocation 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Obstacle Check 
|-------------------------------------------------------------------------------- 
Sub CheckObstacle 
   /doevents 
   /if ((${RV_MyXLOC}==${Int[${Me.X}]})&&(${RV_MyYLOC}==${Int[${Me.Y}]})) /call HitObstacle 
   /varset RV_MyXLOC ${Int[${Me.X}]} 
   /varset RV_MyYLOC ${Int[${Me.Y}]} 
   /varset RV_ObstacleCount 0 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Obstacle Avoidance 
|-------------------------------------------------------------------------------- 
Sub HitObstacle 
   /echo Obstacle hit, moving around it... 
   /keypress forward 
   /keypress back hold 
   /delay 3 
   /keypress back 
   /if (${Math.Rand[2]}) { 
      /keypress strafe_right hold 
   } else { 
      /keypress strafe_left hold 
   } 
   /delay 5 
   /keypress strafe_right 
   /keypress strafe_left 
   /keypress forward hold 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Combat 
|-------------------------------------------------------------------------------- 
Sub CombatSub 
   /doevents 
   /varset RV_Fighting 1 
   /varset RV_TargetDead 0 
   /echo Attacking Mob NOW! 
   /Alt Activate 826
   :CombatLoop 
      /if (!${Me.Combat}) /attack on 
      /if (!${Target.ID}) /return 
      /call MoveToMob 
      /call SpecialIT 
      /if (!${RV_TargetDead}) /goto :CombatLoop 
      /doevents  
/return 

|-------------------------------------------------------------------------------- 
|SUB: Special Combat 
|-------------------------------------------------------------------------------- 
Sub SpecialIt 
   /doevents 
   /declare TempID    int inner  0 
   /if (${Target.Distance}<=17 && ${Me.AbilityReady[Taunt]}) { 
      /doability "Taunt" 
   } 
   /if (${Target.Distance}<=17 && ${Me.AbilityReady[Bash]}) { 
      /doability "Bash" 
   } 
   /if (${Target.Distance}<=17 && ${Me.AbilityReady[Disarm]}) { 
      /doability "Disarm" 
   } 
   /if (${Me.PctHPs}<${SKepicPct}) /call cast ${SKepic} ${SKepicGem}
   /if (${Me.PctHPs}<=${LeechTouchPct}) /alt activate 87
   /if (${Me.PctHPs}<=${LifeTapPct}) /call cast ${LifeTapSpell} ${LifeTapGem}
   /if (${Me.PctHPs}<=${GroupTapPct}) /call cast ${GroupTapSpell} ${GroupTapGem}
   /if (${Target.Distance}<=30 && ${Me.SpellReady[${AggroSpell}]}) { 
   /call cast ${AggroSpell} ${AggroGem} 
   }

/return 



|-------------------------------------------------------------------------------- 
|SUB: Slain 
|-------------------------------------------------------------------------------- 

Sub Event_Slain 
   /varset RV_TargetDead 1 
   /varset RV_Fighting 0 
   /attack off 
   /target clear 
   /keypress forward 
   /keypress back 
   /squelch /target radius 30 corpse 
   /face fast 
   /if (${RV_HasTarget} && (${Defined[RV_LootArray]} || ${RV_LootAllItems})) /call LootMob 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Zoned 
|-------------------------------------------------------------------------------- 
Sub Event_Zoned 
  /echo Zoned 
  /delay 60s 
  /quit 
  /endmacro 

|-------------------------------------------------------------------------------- 
|SUB: Looting 
|-------------------------------------------------------------------------------- 
Sub LootMob 
   /doevents 
   /declare LootSlot    int inner  0 
   /declare LootCheck   int inner  0 
   /declare LootTotal   int inner  0 
   /keypress forward 
   /keypress back 
   /fastdrop on 
   /lootn never 
   /Echo Looting 
   /loot 
   /delay 1s 
   /if (!${Corpse.Items}) { 
      /echo NO LOOT! Cheap Bastard! 
      /notify LootWnd DoneButton leftmouseup 
      /return 
   } else { 
      /varset LootTotal ${Corpse.Items} 
      /for LootSlot 1 to ${LootTotal} 
      /itemnotify loot${LootSlot} leftmouseup 
      /delay 1s 
      /if (${RV_LootAllItems}) { 
         /echo Keeping a ${Cursor.Name}... WOOT! 
         /autoinventory 
         /delay 1s 
      } else { 
         /for LootCheck 1 to ${RV_LootArray.Size} 
            /if (${Cursor.Name.Find[${RV_LootArray[${LootCheck}]}]}) { 
               /echo Keeping a ${Cursor.Name}... WOOT! 
               /varcalc RV_LootStats[${LootCheck}] ${RV_LootStats[${LootCheck}]}+1 
               /autoinventory 
               /delay 1s 
            } 
         /next LootCheck 
      } 
      /if (${Cursor.ID}) { 
         /echo Destroying a ${Cursor.Name}... 
         /destroy 
         /delay 1s 
      } 
   /next LootSlot 
   /notify LootWnd DoneButton leftmouseup 
   } 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Reset 
|-------------------------------------------------------------------------------- 
Sub ResetSub 
   /doevents 
   /varset RV_HasTarget 0 
   /varset RV_TargetDead 0 
   /varset RV_Fighting 0 
/return
 

Users who are viewing this thread

Back
Top