Auto Puller Macro

for the Z axis.... as the mac stands now its 450 to -1000

where are you guys using the puller mac?

have you tried changing to two values to lower numbers?

Code:
   |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

if your on a flat plane ... then you don't need much play at all

target yourself

/echo ${Int[${Target.Z}]}

now look around and target a mob and so the same

that will give you a base for the numbers you want ..

increase each by 50 or so .. and then try it

ARMY
 
we tryed , but that dont work

i tryed to make it work in C2 in pofire, the prob is i try it in a building and there is about 3 floor, it keep targeting the above floor where there is a mobs just up my camp, and he just loop saying changing target without doing it
 
I use this mac on my monk along with ranger and warrior macs by Nils from MQ2 site. Only real problem I am having now is that sometimes my monk pulls a mob and warps half way across the zone. He runs back to camp and basically just sits there waiting.
How would I go about adding some kind of command to like wait 20 seconds once in camp and clear/acquire new target if not in combat by then? Any help would be appreciated. Also I am using the originally posted version of this mac. Here it is though so nobody has to look back

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..." 
#Event ItemSet "[MQ2] ItemSet#*#" 
#Event ItemBounce "[MQ2] ItemBounce#*#" 
#Event ItemCast "[MQ2] ItemCast#*#" 

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... 
   } 
   |------------------------------------------------------------ 
   |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} 

   /declare lastevent string outer None 
   /declare CheckBuffs int outer 0 
   /declare i int outer 
   /declare ialias string outer None 
   /declare doIclick bool outer FALSE 
   /declare bouncenum int outer 1 
   /declare ibounce string outer None 
   /declare itemspellname string outer None 
   /declare clicktimer timer outer 0 
   /squelch /alias /iset /echo ItemSet 
   /squelch /alias /ibounce /echo ItemBounce 
   /squelch /alias /iclick /echo ItemCast 
    
   /varset CheckBuffs 1 

   :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 
      } 
      /if (${CheckBuffs}>0) { 
         /echo Checking Buffs 
         /call ItemCast 
         /varset CheckBuffs 0 
         /echo Aquiring Long Range Mobs 
      } 
      /next RV_CurrentRadius 
      /goto :Acquire 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Pull 
|-------------------------------------------------------------------------------- 
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 

|-------------------------------------------------------------------------------- 
|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! 
   :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[Backstab]}) { 
      /doability "Backstab" 
   } 
   /if (${Target.Distance}<=17 && ${Me.AbilityReady[Disarm]}) { 
      /doability "Disarm" 
   } 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Item Buffs 
|-------------------------------------------------------------------------------- 
Sub ItemCast 
   /doevents 
   /declare ItemDelay int inner 0 
   /varset ItemDelay 1 
   /varset i 1 
   :ItemCheckLoop 
      /doevents 
      /varset ialias ${Ini[PullItems.ini].Arg[${i},|]} 
      /if (${ialias.NotEqual[NULL]}) { 
         /if (${Ini[PullItems.ini,${ialias},KeepUp].Equal[FALSE]}) /goto :NextItem 
         /varset bouncenum 1 
         /varset doIclick TRUE 
         :BounceCheckLoop 
            /varset ibounce ${Ini[PullItems.ini,${ialias},BounceOff${bouncenum}]} 
               /if (${ibounce.NotEqual[NULL]}) { 
                  /if (${ibounce.Equal[${Me.Buff[${ibounce}]}]}) /varset doIclick FALSE 
               } else /goto :DoneBounceChecks 
            /varcalc bouncenum ${bouncenum}+1 
            /goto :BounceCheckLoop 
         :DoneBounceChecks 
            /varset itemspellname ${FindItem[${Ini[PullItems.ini,${ialias},FullName]}].Spell} 
            /if (${itemspellname.Equal[${Me.Buff[${itemspellname}]}]}) /varset doIclick FALSE 
            /squelch /target myself 
            /if (${doIclick}) { 
               /if (${ItemDelay}==1) { 
                  /delay 1s 
                  /varset ItemDelay 0 
               } 
            } 
            /if (${doIclick}) /docommand /iclick ${ialias} 
            /if (${clicktimer}) /goto :DoneItemChecks 
         :NextItem 
            /varcalc i ${i}+1 
      } else /goto :DoneItemChecks 
      /goto :ItemCheckLoop 
      :DoneItemChecks 
         /doevents 
         /squelch /target clear 
/return 

Sub Event_ItemSet(string Line) 
   /varset lastevent Event_ItemSet 
   /if (!${Line.Arg[5].Length} || ${Line.Arg[6].Length}) { 
      /if (${verbosity}>=0) /${channel} ** Improper use of /iset 
      /if (${verbosity}>=0) /${channel} -- /iset <itemalias> keepup|nokeepup <"Item Name"> 
      /if (${verbosity}>=0) /${channel} -- For example: 
      /if (${verbosity}>=0) /${channel} -- /iset gobby keepup "Shrunken Goblin Skull Earring" 
      /return 
   } 
   /ini "PullItems.ini" "${Line.Arg[3]}" "FullName" "${Line.Arg[5]}"  
   /ini "PullItems.ini" "${Line.Arg[3]}" "KeepUp" "${If[${Line.Arg[4].Equal[keepup]},TRUE,FALSE]}" 
   /if (${verbosity}>=0) /${channel} ** ${Line.Arg[5]} (KeepUp=${If[${Line.Arg[4].Equal[keepup]},TRUE,FALSE]}) updated in INI! 
/return 

Sub Event_ItemBounce(string Line) 
   /varset lastevent Event_ItemBounce 
   /if (!${Line.Arg[4].Length}) { 
      /if (${verbosity}>=0) /${channel} ** Improper use of /ibounce 
      /if (${verbosity}>=0) /${channel} -- /ibounce <itemalias> "Some Spell Name" 
      /if (${verbosity}>=0) /${channel} -- For example: 
      /if (${verbosity}>=0) /${channel} -- /ibounce gobby "Strength of Tunare" 
      /return 
   } 
   /if (!${Ini[PullItems.ini,${Line.Arg[3]}].Length}) { 
      /if (${verbosity}>=0) /${channel} ** [${Line.Arg[3]}] not in INI file! 
      /return 
   } 
   /declare bindex int local 1 
   :CheckNextKey 
      /if (${Ini[PullItems.ini,${Line.Arg[3]},BounceOff${bindex}].Length}) { 
         /varcalc bindex ${bindex}+1 
         /goto :CheckNextKey 
      } else { 
      /ini "PullItems.ini" "${Line.Arg[3]}" "BounceOff${bindex}" "${Line.Arg[4]}"  
      /if (${verbosity}>=0) /${channel} ** Added "${Line.Arg[4]}" to [${Line.Arg[3]}]'s bounce list 
      } 
/return 

Sub Event_ItemCast(string Line) 
   /varset lastevent Event_ItemCast 
   /if (!${Line.Arg[3].Length}) { 
      /if (${verbosity}>=0) /${channel} ** Improper use of /icast 
      /if (${verbosity}>=0) /${channel} -- /icast <itemalias> 
      /if (${verbosity}>=0) /${channel} -- For example: 
      /if (${verbosity}>=0) /${channel} -- /icast gobby 
      /return 
   } 
   /if (!${Ini[PullItems.ini,${Line.Arg[3]}].Length}) { 
      /if (${verbosity}>=0) /${channel} ** [${Line.Arg[3]}] not in INI file! 
      /return 
   } 
   /declare fullname string local ${Ini[PullItems.ini,${Line.Arg[3]},FullName]} 
   /if (${verbosity}>=1) /${channel} ** Attempting to use: ${fullname} 
   /if (${FindItem[${fullname}].InvSlot.Pack}) { 
      :OpenPack 
         /if (!${Window[${FindItem[${fullname}].InvSlot.Pack.Name}].Open}) { 
            /itemnotify ${FindItem[${fullname}].InvSlot.Pack.Name} rightmouseup 
            /delay 2 
            /goto :OpenPack 
         } 
         /declare camefrom ${FindItem[${fullname}].InvSlot} 
      :GrabItem 
         /if (!${Cursor.ID}) { 
            /itemnotify ${InvSlot[${camefrom}]} leftmouseup 
            /delay 2 
            /goto :GrabItem 
         } 
         /declare clickyID int local ${Cursor.ID} 
         /declare wornat int local ${Cursor.WornSlot[1]} 
      :SwapFirst 
         /if (${Cursor.ID}==${clickyID}) { 
            /itemnotify ${InvSlot[${wornat}]} leftmouseup 
            /delay 2 
            /goto :SwapFirst 
         } 
         /delay 2 
         /if (${verbosity}>=1) /${channel} ** Clicking: ${fullname} 
         /declare previousID ${Cursor.ID} 
         /itemnotify ${InvSlot[${wornat}]} rightmouseup 
      :SwapAgain 
         /if (${Cursor.ID}==${previousID}) { 
            /itemnotify ${InvSlot[${wornat}]} leftmouseup 
            /delay 2 
            /goto :SwapAgain 
         } 
      :PutItBack 
         /if (${Cursor.ID}==${clickyID}) { 
            /itemnotify ${InvSlot[${camefrom}]} leftmouseup 
            /delay 2 
            /goto :PutItBack 
         } 
      :SummonedCheck 
         /if (${Cursor.ID}) { 
            /autoinv 
            /delay 2 
            /goto :SummonedCheck 
         }    
      :ClosePack 
         /if (${Window[${InvSlot[${camefrom}].Pack.Name}].Open}) { 
            /itemnotify ${InvSlot[${camefrom}].Pack.Name} rightmouseup 
         /delay 2 
         /goto :ClosePack 
         } 
   } else { 
   /if (${FindItem[${fullname}].InvSlot}) { 
      /if (${verbosity}>=1) /${channel} ** Clicking: ${fullname} 
      /itemnotify ${FindItem[${fullname}].InvSlot} rightmouseup 
      /delay 2 
   } else { 
   /if (${verbosity}>=0) /${channel} ** "${fullname}" not found! 
      } 
   } 
   :CastLoop 
      /delay 1 
      /squelch /target radius 100 npc 
      /if (${Target.ID}) { 
         /if (${Target.CleanName.Equal[${Me.Name}]}) { 
            /squelch /target clear 
            /goto :CloseMobCheck 
         } 
         /keypress duck 
         /delay 1 
         /keypress duck 
         /delay 1 
         /return 
      } 
   :CloseMobCheck 
      /if (${Me.Casting.ID}) /goto :CastLoop 
/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 
   /varset CheckBuffs 1 
   /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


Any ideas for this? Really just need it to wait 20 seconds once in camp and then clear target/acquire new target if not in combat.
 
Hmmm been watching this mac run for very long time last 2 days.
Not seen my toon warp across zone or a mob yet. Runs good far as that goues. I put in a /keypress 8 (which does a /hidecorpse all) and fixed my looting problems.

My only things are one the ini for keeping up clickies isnt working so well. Will try and cast them but runs off soon as starts casting.

And two..... it seems like the puller gets futher and futher out from camp every pull. IS there somehow to tighten this up. I would not mind if he come back to an exact spot everytime. I doubt many people would notice.

AND three seems to randomly stop working but is still running. I think I figured it out though. My #2 problem I think is this culprit. Because the toon doesnt get back to the x,y spot set on mac start up. He doesnt reset and look for new target. Figured this out after several stops but mac still working... and to fix I just moved a bit and it would get new target and move. Where as before would just sit the with mac still on but stuck I think.

So yes anyway to MAKE it go to the set spot everytime?
Ya just 1 minute ago. Froze up againa nd moved forward a little and started right back up. Anyone know how to make it run straight to the x,y loc then turn to fight or after mob dead be sure to run to x,y?
That makes 7 or 8 freezes in last 2 hours and all I did to fix it was move a little.
 
Hmmm been watching this mac run for very long time last 2 days.
Not seen my toon warp across zone or a mob yet. Runs good far as that goues. I put in a /keypress 8 (which does a /hidecorpse all) and fixed my looting problems.

My only things are one the ini for keeping up clickies isnt working so well. Will try and cast them but runs off soon as starts casting.

And two..... it seems like the puller gets futher and futher out from camp every pull. IS there somehow to tighten this up. I would not mind if he come back to an exact spot everytime. I doubt many people would notice.

AND three seems to randomly stop working but is still running. I think I figured it out though. My #2 problem I think is this culprit. Because the toon doesnt get back to the x,y spot set on mac start up. He doesnt reset and look for new target. Figured this out after several stops but mac still working... and to fix I just moved a bit and it would get new target and move. Where as before would just sit the with mac still on but stuck I think.

So yes anyway to MAKE it go to the set spot everytime?
Ya just 1 minute ago. Froze up againa nd moved forward a little and started right back up. Anyone know how to make it run straight to the x,y loc then turn to fight or after mob dead be sure to run to x,y?
That makes 7 or 8 freezes in last 2 hours and all I did to fix it was move a little.


Yeah my toon isnt warping but in some of the newer open zones when you pull sometimes the mob will warp across the zone. As far as setting how far your puller goes Im pretty sure you just have to adjust the numbers for that in the very beginning of the macro.
With the buffage thing I sent ya some of my downshits that I know for a fact are working cause Im watchin em now :) They should help keep self buffs/clickies up.
Lastly, I thought that the macro set up an anchor point on startup and that your puller would run back to it before pulling again. At least thats what my monk is doing. I have had the mac seem to stop working after hours of pulling but not as frequently as you describe so not sure on that. Hope the downshits help!
 
I tried to get mq2melee and this mac to function together but it seems for me it runs better without melee running so no the down/holyshits probably wont work. Part of the trouble was melee would not let me run back to camp. I tried turning off everything but still would want to cast agro spells. I am just using the 2 combat things in macro for taunt and bash seems to work well enough for now. Would like to add a spell cast in there but that can wait.

I have narrowed the trouble down to one the puller toon tries to loot and is stuck targeting the dead body but doesn't loot.

And two as the macro runs. The return point the toon runs back to with the mobs gets futher and futher away from camp it seems. I do not mean he pulls futher away from camp. I mean he runs back to camp and stops and he is a little futher from where the toon was standing when I started the mac.

And three either because of the second problem or during battle he gets away from the origin/camp spot. He will not start aquiring targets again looks like the mac is ended but it is not. All I have to do is move him a bit and he turns around and runs to get another mob.

The looting thing I added a /keypress 8 ( does a /hidecorpse all for puller plus it then tells two of my bots in eqbc to do the same.) added it after the gm check. Unfortunately it spams the shit out of it till it gets a mob sometimes.
 
That is what happens when a tard like me tries and explain what is happening when the mac is running. I have no clue how to write a macro so how can I articulate what it is doing properly and clearly?

But what is confusing you about what I wrote?
 
I tried to get mq2melee and this mac to function together but it seems for me it runs better without melee running so no the down/holyshits probably wont work. Part of the trouble was melee would not let me run back to camp. I tried turning off everything but still would want to cast agro spells. I am just using the 2 combat things in macro for taunt and bash seems to work well enough for now. Would like to add a spell cast in there but that can wait.

I have narrowed the trouble down to one the puller toon tries to loot and is stuck targeting the dead body but doesn't loot.

And two as the macro runs. The return point the toon runs back to with the mobs gets futher and futher away from camp it seems. I do not mean he pulls futher away from camp. I mean he runs back to camp and stops and he is a little futher from where the toon was standing when I started the mac.

And three either because of the second problem or during battle he gets away from the origin/camp spot. He will not start aquiring targets again looks like the mac is ended but it is not. All I have to do is move him a bit and he turns around and runs to get another mob.

The looting thing I added a /keypress 8 ( does a /hidecorpse all for puller plus it then tells two of my bots in eqbc to do the same.) added it after the gm check. Unfortunately it spams the shit out of it till it gets a mob sometimes.


I had the same prob with puller getting stuck on corpses, but Orion hooked me up an easy fix that is a few pages back. Basically when mob dies the macro clears target once so he wont get stuck on corpse and by doing that the mac cycles to the next "living" mob. Works like a charm and was a simple add.
As far as the melee stuff firing while you are pulling you should just be able to set the targets health % and/or self buff % a bit lower so that your puller doesn't try to cast until back at camp.
With your puller moving farther away from original camp spot Im not real sure why that would happen. Only thing I can think is that because of the down/holyshits firing your puller is engaging the mob sooner than you would like due to damage taken/given?. Thats just a guess based on my admittedly limited experience/knowledge.
I use this mac and melee and changed some of the %'s lower and it seemed to help a lot just with the flow of pulls and killing.
Oh and if anyone can help me add it so that the puller gets back to camp, waits 20 seconds, if not in melee by then clears target and finds new target I would be eternally grateful!
Oh and I am running this in Loping Plains atm, mobs warp crazy in here sometimes.
 
Ah I remember pulling in loping. I would have almost bard speed on my puller. And would get out of range of the mob and it would warp. Try slowing the puller's run speed down a bit... actually for me it was a drastic amount.


Far as the fix you mentioned. I tried to figure out how to insert it but never worked for me. I just threw a /keypress 8 in right here


Code:
:Start 
      /doevents 
      /call GMCheck 
      /call GetTarget 
      /if (${RV_HasTarget}) /call Pull 
      /if (${RV_HasTarget}) /call CombatSub 
      /call ResetSub 
      /call MoveToLoc ${RT_MyyLOC} ${RT_MyXLOC} 
      /keypress 8   <---- see
      /goto :Start 
/return

that is a hide corpses commend for me and the bots in my group not looting.

Since I turned off mq2melee has been running a lot smoother. But every so often will check in on it and will have to move the puller a bit and will go and find a new target.
Would say been running for 12 hours today. Last 5 I have not had to restart it but would have to move the puller a bit to get it to start searching for targets again. Every so often the puller would not get agro on a mob and run back with it targeted waiting for a mob that will never come. So I would hit esc and move a bit and right back it the puller would go.
 
In bloody kithikor, some of the mobs are right behind the trees making the person get stuck, is there a way to do a line of sight to get the combat mode because the person after awhile will just be running head on into a tree.
 
completely untested but you could do something to the effect of
/if (!${Target.LineofSight}) {
/echo Mob is Not in Line of Sight, picking another...
/varset RV_InvalidTargetID ${Target.ID}
/call ResetSub
/goto :Acquire
}

near the part with

/if (${Target.PctHPs}<100) {
/echo Mob is Not Full Health, picking another...
/varset RV_InvalidTargetID ${Target.ID}
/call ResetSub
/goto :Acquire
}
or passably combined into the same part:
/if ((${Target.PctHPs}<100) || !${Target.LineofSight}) {
/echo Mob is Not Full Health or line of sight, picking another...
/varset RV_InvalidTargetID ${Target.ID}
/call ResetSub
/goto :Acquire
}
as a side note this would also help with mobs on different floors :)
 
im having an issue with the distance after the mob is pulled back to the start point and engaged. The mob is simply to far away to kick. i can hit it but to far for kick taunt and such?

Code:
/declare RV_RangeMax         int outer  5
   |------------------------------------------------------------ 
   |How far is the minimum combat range? 
   |------------------------------------------------------------ 
   /declare RV_RangeMin         int outer  6
are these set right or is this just not the right area to edit?
 
There are couple things you could do, one of the simplest just throw in,

Code:
/keypress esc

in the beginning of GetTarget Sub.

or

Code:
/if (${Target.PctHPs}==0) {
     /keypress esc
     /return
     }

at the beginning of the Combat Loop.

or

Code:
/if (${Target.ID} && ${Target.PctHPs}==0) {
     /keypress esc
     /goto :Acquire
     }

as an additional check in the :Acquire loop


Got it to clear once mob is done, where and what would I put if I wanted toon to /keypress esc 5 seconds after reaching camp?
 
restart?

Would it be possible to add a line in that would make the macro restart after say an hour or so, so that it would /mac pull after that set amount of time? Have messed around with adding /keypress esc once puller reaches the camp in order to help with mobs that have warped too far away and while it is a pretty ghetto fix it seems to work most of the time. Sometimes it just seems to get stuck and if I just restart it works again np's. Any suggestions appreciated!
 
Hey was using this mac and everything was going fine today. Then all the sudden it stop working. It will not target anything anymore... it says [mq2] looking for close range targets. But will not go after anything. If I target something though the puller will go get it. I have not changed anything from the time I started it up and it was working till it stop. Then I tried changing ranges on the distance to go for targets to the Z axis.

Anyone got a clue?

I think I fixed it.
 
Last edited:
Would it be possible to add a line in that would make the macro restart after say an hour or so, so that it would /mac pull after that set amount of time? Have messed around with adding /keypress esc once puller reaches the camp in order to help with mobs that have warped too far away and while it is a pretty ghetto fix it seems to work most of the time. Sometimes it just seems to get stuck and if I just restart it works again np's. Any suggestions appreciated!

add
/declare RV_resettimer timer outer 3600s

at the start of the main function. then in the main loop for the main functino add at the top of the loops
/if (${RV_resettimer} < 5) /mac pull

This will restart it.
 
I have been using robdawgs mac for sometime now, has worked great, until last night after the update. I am now getting a failure within the macro and it ends. The timeout of this issue seems to re random from5 min to 6 hrs.

I get the following error:

Unparsable in Calculation '#'
....mac@319(movetoloc......
....mac@244(pull):call movetoloc.....
....mac@125(main):if.....
Failed to parse /if condition'(-1.#J<11)', non-numeric encountered[/COLOR]

if you need more of the code i can surely do, just wasn't sure what might be needed. Would love any help for i do not know where to start on this.
Thanks to any and all who take the time.
 

Attachments

  • Puller mac.JPG
    Puller mac.JPG
    23.5 KB · Views: 25