• 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

Tweaks to Blitter's "Into the Hills" Macro

geEQ

Member
Joined
Jan 24, 2014
RedCents
99¢
I have made some tweaks to Blitter's original "Into the Hills" macro using the Bard puller. I have had a great deal of success with these. If you have made your own tweaks, please share them. I'd love to see how folks increased the pull speed.

The first thing I added was some information about the songs the author was using:
Rich (BB code):
| I've used the gemnumber to redo the bard aura. I didn't spend a lot of time on it, but I couldn't get either /casting " " or /cast " " to work adequately in regards to the /stopsong
| Which basically caused the macro to stall/stop.
|the Spell gem lineup is:
|1. Aria of Va'Ker
|2. Gosik's Aria
|3. Kalifus' Song of Suffering
|4. Arcane Hymn
|For melee DPS, swap out Gosik's for Warmarch.
|5. Aura of Salarra
|9. Slumber of Motlak

Next, when fighting a single mob, the bard just sings (about line 127):
Rich (BB code):
/if (${BardSong}!=1 || !${Me.Casting.ID}) {
/stopsong
/delay 1
/bc [+t+]Fight [+x+]Song
/melody ${FightMelody}
/varset BardSong 1
/varset Faded 0

I changed it so the bard will face mob, assist tank, actually melee:
Rich (BB code):
/if (${BardSong}!=1 || !${Me.Casting.ID}) {
/stopsong
/delay 1
/face fast
/bc [+t+]Fight [+x+]Song
/melody ${FightMelody}
/assist ${TankName}
/delay 10 ${Target.ID}
/killthis
/varset BardSong 1
/varset Faded 0

When there are multiple mobs inc - from this (about line 146):
Rich (BB code):
/delay 25s ${Target.Distance}<70||${Me.XTarget}<2
/melody ${MezMelody[${NumMez}]}

I changed it to this (face the mobs):
Rich (BB code):
/delay 25s ${Target.Distance}<70||${Me.XTarget}<2
/face fast
/melody ${MezMelody[${NumMez}]}

The bard commands others to cast clickie buffs (about line 310)
Rich (BB code):
| Load up some clickie buffs on toons.
/bca //useitem 3
/delay 6
/bca //useitem 6
/delay 6
/bca //useitem 20
/delay 6
/bca //useitem 11
/delay 6
/bca //useitem 15
/delay 6

But the bard has clickies too, so /bcaa:
Rich (BB code):
| Load up some clickie buffs on toons.
/bcaa //useitem 3
/delay 6
/bcaa //useitem 6
/delay 6
/bcaa //useitem 20
/delay 6
/bcaa //useitem 11
/delay 6
/bcaa //useitem 15
/delay 6

Right after the clickies I added a section for the campfire to be destroyed and remade:
Rich (BB code):
| Set Campfire
/windowstate FellowshipWnd open
/delay 5
/nomodkey /notify FellowshipWnd FP_Subwindows tabselect 2
/nomodkey /notify FellowshipWnd FP_DestroyCampsite leftmouseup
/delay 5s
/if (${Window[ConfirmationDialogBox].Open}) {
/nomodkey /notify ConfirmationDialogBox Yes_Button leftmouseup
}
/delay 5s
/delay 1s
/nomodkey /notify FellowshipWnd FP_RefreshList leftmouseup
/delay 1s
/nomodkey /notify FellowshipWnd FP_CampsiteKitList listselect 1
/delay 1s
/nomodkey /notify FellowshipWnd FP_CreateCampsite leftmouseup
/delay 5s
/windowstate FellowshipWnd close
/return

I ignored Generic macro setup around line 340:
Rich (BB code):
/bct ${Toon2} //tar ${TankName}
/delay 5s
/bct ${TankName} //mac ${TankMacro}
/bct ${Toon1} //mac ${Macro1}
/bct ${Toon3} //mac ${Macro3}
/bct ${Toon2} //mac ${Macro2}
/bct ${LooterName} //hidecorpse looted
/delay 5
/bct ${LooterName} //mac ${LooterMacro}
/delay 5s

Then I added section to set group roles and call kissassist macros (the bard must be the group leader):
Rich (BB code):
| Set group roles and xtarget1 to Group Tank's Target
  /grouproles set ${TankName} 1
  /grouproles set ${TankName} 2
  /grouproles set ${Me.Name} 3
  /xtarget set 1 GTT

| Send Kissassist Commands and pause 1 minute  
  /bca //mac kissassist assist ${TankName} 99
  /bct ${TankName} //tar ${TankName}
  /bct ${TankName} //mac kissassist tank ${TankName}
  /delay 60s
/return

In the Bloodsucker pull section around line 508
Rich (BB code):
/bc Fading Bloodsucker as he is with an Add - ${Me.XTarget}
/varcalc Faded ${Faded}+1

I added a command to the tank to press escape to clear target:
Rich (BB code):
/bc Fading Bloodsucker as he is with an Add - ${Me.XTarget}
/bct ${TankName} //keypress esc
/varcalc Faded ${Faded}+1

I added a wait for rez section at the end:
Rich (BB code):
|------------------------------------------------------------
|Wait4Rez
|------------------------------------------------------------
Sub Wait4Rez
:waitforrez
/if (!${Window[ConfirmationDialogBox].Open}) {
/delay 5s ${Window[ConfirmationDialogBox].Open}
/goto :waitforrez
}
/if (${Window[ConfirmationDialogBox].Open}) /notify ConfirmationDialogBox Yes_Button leftmouseup
/return

Then I made the following changes/additions to the bard's melee ini file:

Rich (BB code):
[MQ2Rez]
Soundfile=C:\Program Files (x86)\EverMQ\mq2rez.wav
Accept=1
RezCommandOn=1
Command Line=/mac dead2

[MQ2Melee]
enrage=1
facing=1
infuriate=1
melee=1
plugin=1
resume=75
selos=1
stickbreak=1
stickrange=0
version=6.060
holyflag1=1
Holyshit1=/if (${Me.CombatState.Equal[COMBAT]} && ${Me.PctHPs}<40 && ${Me.AltAbilityReady[Fading Memories]}) /multiline ; /twist stop ; /alt act 212 ; /twist start
downflag1=1
downshit1=/if (${Me.CombatState.Equal[COMBAT]} && ${SpawnCount[npc radius 10]}> 1 && ${Me.CurrentMana} > 900 && ${Me.PctHPs}<30 && ${Me.AltAbilityReady[Fading Memories]} && ${Macro.RunTime} >1) /casting "Fading Memories"
downflag0=1
downshit0=/if (${Me.XTarget} >= 1 && ${SpawnCount[npc radius 50]} >=1 && ${Me.CombatState.Equal[COMBAT]} && !${Me.Moving} ) /multiline ; /if (${Spawn[${Me.XTarget[1].ID}].Distance} <= 50) /target id ${Me.XTarget[1].ID} ; /timed 50 ; /face
downflag2=1
downshit2=/if (${Select[${Zone.ShortName},guildlobby,poknowledge]} && (!${Me.Buff[Revival Sickness].ID} && ${CampZone} != ${Zone.ID}) && (${Me.Fellowship.Campfire}) && (!${Me.Moving}) && (${FindItem[Fellowship Registration Insignia].TimerReady} == 0)) /multiline ; /squelch ; /nomodkey ; /itemnotify ${FindItem[Fellowship Registration Insignia].InvSlot} rightmouseup

Since I run an SK tank, I have it summon the bard's corpse if he dies and clicks back to the campfire. I added this to the Sk's melee.ini:
Rich (BB code):
Downflag1=1
downshit1=/if (${SpawnCount[${Group.Puller} corpse]} && ${Me.XTarget} < 1) /multiline ; /timed 50 ; /squelch /tar ${Group.Puller} ; /timed 50 ; /alt act ${Me.AltAbility[Summon Remains].ID}
 
Last edited:
My best team gets through in 45 minutes. The scrubs I am running through this double XP weekend are taking an hour per run.
 
Wow. That's faster than I was doing while I was controlling the puller.

I have the 3 mob setup it will only fade with 4 or more. Also on my own i do these in 10 minutes with 4 wizards and no CC(my tank buffs out to 140k 12k AC) so hes fully raid geared. I bet a raid pally could get away with 5 dps and self heal if he can manage to only pull 1-2 at a time.
 
I have the 3 mob setup it will only fade with 4 or more.

I could never place Blitter's changes in the right spots to get the meaty version running.

He posted this:
Rich (BB code):
:killmob
  /if (${Me.CombatState.NotEqual[COMBAT]} && ${ReturnGribble}==1) /call ReturnToGribble
  /if  (${CampNum}==1) {
     /if (${Me.CombatState.NotEqual[COMBAT]}) {
       /call PullMobA 1 2 160 0 4
    }
  }
  /if (${CampNum}==2) {
    /if (${Me.CombatState.NotEqual[COMBAT]}) {
     /alt activate 3704
     /call PullMobA 1 3 130 0 2
      } else {
 |  This will go and pull another mob when there is only 1 mob in camp and it is below 70% HP's
     /if (!${Me.XTarget[2].ID}) {
     /if (${Me.XTarget[1].PctHPs}<70 && ${Me.XTarget}<2 && ${Me.AltAbilityReady[Boastful Bellow]}) {
       /alert add 1 ${Spawn[id ${Me.XTarget[1].ID}]}
       /bc added ${Spawn[id ${Me.XTarget[1].ID}]}
       /alt activate 3704
       /call PullMobA 1 3 130 0 2
     }
     }
    }
  }
  /if (${CampNum}==3) {
    /if (${Me.CombatState.NotEqual[COMBAT]}) {
     /alt activate 3704
     /call PullMobA 1 3 240 0 3
     } else {
|   This will go and pull another mob when there is only 1 mob in camp and it is below 70% HP's
     /if (!${Me.XTarget[2].ID}) {
     /if (${Me.XTarget[1].PctHPs}<70 && ${Me.XTarget}<2 && ${Me.AltAbilityReady[Boastful Bellow]}) {
       /alert add 1 ${Spawn[id ${Me.XTarget[1].ID}]}
       /bc added ${Spawn[id ${Me.XTarget[1].ID}]}
       /alt activate 3704
       /call PullMobA 1 3 240 0 3
      }
     }
    }
  }
  /doevents

But then he made some changes in a later post and I got all confused. What does your :killmob section look like?
 
Mine pulls 3. I haven't added some of the melee yet. Right now it takes about 30 minutes with a full group. Slower with leeches.

Code:
:killmob
  /if (${Me.CombatState.NotEqual[COMBAT]} && ${ReturnGribble}==1) /call ReturnToGribble
  /if  (${CampNum}==1) {
     /if (${Me.CombatState.NotEqual[COMBAT]}) {
       /call PullMobA 1 2 160 0 4
    }
  }
  /if (${CampNum}==2) {
    /if (${Me.CombatState.NotEqual[COMBAT]}) {
     /alt activate 3704
     /call PullMobA 1 3 130 0 2
      } else {
 |  This will go and pull another mob when there is only 1 mob in camp and it is below 70% HP's
     /if (!${Me.XTarget[2].ID}) {
     /if (${Me.XTarget[1].PctHPs}<70 && ${Me.XTarget}<2 && ${Me.AltAbilityReady[Boastful Bellow]}) {
       /alert add 1 ${Spawn[id ${Me.XTarget[1].ID}]}
       /bc added ${Spawn[id ${Me.XTarget[1].ID}]}
       /alt activate 3704
       /call PullMobA 1 3 130 0 2
     }
     }
    }
  }
  /if (${CampNum}==3) {
    /if (${Me.CombatState.NotEqual[COMBAT]}) {
     /alt activate 3704
     /call PullMobA 1 3 240 0 3
     } else {
|   This will go and pull another mob when there is only 1 mob in camp and it is below 70% HP's
     /if (!${Me.XTarget[2].ID}) {
     /if (${Me.XTarget[1].PctHPs}<70 && ${Me.XTarget}<2 && ${Me.AltAbilityReady[Boastful Bellow]}) {
       /alert add 1 ${Spawn[id ${Me.XTarget[1].ID}]}
       /bc added ${Spawn[id ${Me.XTarget[1].ID}]}
       /alt activate 3704
       /call PullMobA 1 3 240 0 3
      }
     }
    }
  }
    /doevents
 
Nice I just got my bard to 100 this weekend thanks to the double exp... will add the tweaks and see if I can do better then then chanter version which takes about 50mins now
 
I was able to speed this up changing it to go pull at 90% plus I made it so it will pull even with 3 mobs in camp. My tank can handle 7 at a time this 1 mob at a time makes me fall asleep :)
 
I did many of the things that are listed above some time ago, one thing I did that I haven't see posted was to have my toons move up to my tank, so that if they pulled aggro, my tank wasn't bouncing around chasing them:

Rich (BB code):
:SkipZoneIn
  /call ZoneIn
  /bct ${TankName} //moveto loc 480.4 -251
  /delay 3s
  /bct ${Toon1} //moveto loc 477 -254
  /moveto loc 480.4 -251
  /delay 3s
  /call SetupCamp
 
Re: Tweaks to Blitter's &amp;quot;Into the Hills&amp;quot; Macro

Also on my own i do these in 10 minutes with 4 wizards

Are the wizards using KA? Any chance the .ini file(s) are in the KA forum? Or will be someday?

I need to make more wizzies!

- - - Updated - - -

my toons move up to my tank, so that if they pulled aggro, my tank wasn't bouncing around chasing them

Great Idea!
 
Re: Tweaks to Blitter's &amp;quot;Into the Hills&amp;quot; Macro

Are the wizards using KA? Any chance the .ini file(s) are in the KA forum? Or will be someday?

I need to make more wizzies!

- - - Updated - - -



Great Idea!

No they're using the afnuke macro I posted.
 
I found that with my bard actually meleeing, it would sometimes start to kill the mob before it was back to the camp. (i.e. turning attack on during the pull) This bit helped.


Rich (BB code):
/if (${BardSong}!=1 || !${Me.Casting.ID}) {
/stopsong
/delay 1
/face fast
/bc [+t+]Fight [+x+]Song
/melody ${FightMelody}
/assist ${TankName}
/if (${Target.PctHPs}<97) /killthis
/varset BardSong 1
/varset Faded 0
 
I couldn't get the macro to consistently click the respawn window and campfire. Basically if the bard dies while returning to the camp it will not respawn. So I just did this in mq2melee.

downshit0=/if (${Zone.ID}==344 && ${Macro.Name.Equal[dead2.mac]}) /mac dead2restart

I made a restart macro that will click the campfire and restart the dead2.mac.

The restart macro is simple.

Rich (BB code):
#turbo 40
Sub Main
 :Mainloop
/if (${Me.Fellowship.Campfire} && ${Me.CombatState.Equal[Active]} && ${Cast.Ready[Fellowship Registration Insignia]} && ${Zone.ID}==344) /casting "Fellowship Registration Insignia"
/delay 60s
/if (${Zone.ID}==771) {
/sit
/delay 180s
/mac dead2
}
/goto :Mainloop
/return

Team this with my SK summoning the bards corpse and cleric to rez and it works flawlessly even if it takes a few minutes for the bard to auto zone to bind instead of clicking respawn.
 
Last edited:
(${Zone.ID}==344 && ${Macro.Name.Equal[dead2.mac]})

I like this. I was trying to think of good conditions for my /down statement so the bard wouldn't click the fellowship insignia anytime I walked into the guild lobby.
 
Re: Tweaks to Blitter's &amp;quot;Into the Hills&amp;quot; Macro

:) me to which is why I thought of only doing it when the macro was running.

- - - Updated - - -

changed the restart macro some. Now it will only sit and restart dead2 IF you're in deadhills. Before it would do it in the GL even if you never clicked the fellowship.
 
Here are my changes, moves group, fights single mobs etc. It's still sloppy and just a hack but haven't had much time to code lately.

Rich (BB code):
#include spell_routines.inc

#event ToonReady "<#1> Ready"
#event WarriorEnage "<#1#> Engaging #2#"
#event LootingEvent "#*# has looted a #1#.-#*#"
#event UpdateEvent "#*#Your task '#1#' has been updated."
#event  AggroCall	"#*#Aggro set, burn it!#*#"


Sub Main

  /declare DummyVariable int 1

|  Bard should have first Extended Target set to Tank's Target.   And the Tank should already be 

assigned (via the Group Leader)- this macro will do neither of those things.
|  6 Toons, Bard which runs this macro,  Tank who runs his macro, he will get pushed forward of 

the others slightly from the camps.
|  The other 3 toons and there respective macros to be run on start up.

| This macro is untested with mercs, but it should still work with them.

| My bard is pretty meaty.  There is no recourse for rezzing anyone.
| If you do die and manually rez up.  If you are at the zone in position, you can simply /mac 

dead and it will continue on




   /declare TankName string outer TOONNAME
  /declare TankMacro string outer MACRONAME
  /declare LooterName string outer TOONNAME
  /declare LooterMacro string outer kissassist
  /declare Toon1 string outer TOONNAME
  /declare Macro1 string outer kissassist
  /declare Toon2 string outer TOONNAME
  /declare Macro2 string outer kissassist
  /declare Toon3 string outer TOONNAME
  /declare Macro3 string outer mage

| I've used the gemnumber to redo the bard aura.  I didn't spend a lot of time on it, but I 

couldn't get either /casting "  "  or /cast "  " to work adequately in regards to the /stopsong
| Which basically caused the macro to stall/stop.
  /declare AuraGem int outer 7

| Mez is in Spellbar position 9 for me.
  /declare MezMelody[6] string outer

| Normal combat melody
  /declare FightMelody string outer 1,2,3,4

| This is not used in this particular macro.
  /declare AEMezMelody string outer 11,1,2,3,4,1,2,3,4,1,2

  /declare IniPathFile string outer hillsinto2.ini
  /declare Path[5,20,2] int outer
  /declare MaxPaths int outer
  /declare NumReady int outer 0

  /declare CampNum int outer 1
  /declare ReadysRequired int outer 0
  /declare BardSong int outer 0
  /declare MezMob int outer 0
  /declare MezCount int outer 0
  /declare MezTimer timer outer 0
  /declare ClickName string outer 0
  /declare OuterItem string outer
  /declare ReturnGribble int outer 0
  /declare zrange int outer 100
  /declare BugTimer timer outer 20000
  /declare BugF int outer 0
  /declare NumTargets int outer 0
  /declare CurrentTarget int outer 0
  /declare NumMez int outer 0
  /declare MelodyTimer timer outer 0
  /declare EventStep int outer 0
  /declare Faded int outer 0
  /declare MezSong string outer Slumber of Motlak

  /declare MezTargets int outer 0
  /declare CheckMez timer outer 0

  /if (${Defined[Param0]}) /varset CampNum ${Param0}
  /varset MezMelody[1] 9 1  2 3 1 2
  /varset MezMelody[2] 9 9  1 2 1 2
  /varset MezMelody[3] 9 9  9 1 2 3
  /varset MezMelody[4] 9 9  9 9 1 2
  /varset MezMelody[5] 9 9  9 9 9 1
  /varset MezMelody[6] 9 9  9 9 9 9
  /call SetUp
  /if (${Zone.ShortName.Equal[deadhills_errand]}) /goto :killmob
  /call GetInstance
 :SkipZoneIn
  /call ZoneIn
  /bct ${TankName} //moveto loc 480.4 -251
  /bca //tar ${TankName}
  /moveto loc 480.4 -251
  /delay 3s
  /call SetupCamp
:killmob
  /if (${Me.CombatState.NotEqual[COMBAT]} && ${ReturnGribble}==1) /call ReturnToGribble
  /if  (${CampNum}) {
     /if (${Me.CombatState.NotEqual[COMBAT]}) {
       /call PullMobA 1 2 160 0 4
 |   } else {
 |  This will go and pull another mob when there is only 1 mob in camp and it is below 70% HP's
 |    /if (!${Me.XTarget[2].ID}) {
 |    /if (${Me.XTarget[1].PctHPs}<70 && ${Me.XTarget}<2 && ${Me.AltAbilityReady[Boastful 

Bellow]}) {
 |      /alert add 1 ${Spawn[id ${Me.XTarget[1].ID}]}
 |      /bc added ${Spawn[id ${Me.XTarget[1].ID}]}
 |      /call PullMobA 1 8 240 0 4 
 |    }
 |   }
    }
  }
  |/if (${Me.CombatState.NotEqual[COMBAT]} && ${CampNum}==2) {
   |/alt activate 3704
   |/call PullMobA 1 2 130 0 2
 |}
  |/if (${Me.CombatState.NotEqual[COMBAT]} && ${CampNum}==3) {
   | | SELOS SONATA
    | /alt activate 3704
     |/call PullMobA 1 2 240 0 3
  |}
  /doevents
  /if (${Me.State.Equal[HOVER]}) {
    /varset CampNum 6
    /call Wait4Rez
  }
  /delay 2
  /doevents
  /if (${Me.XTarget}==0) /goto :killmob


	| Ther eare mobs in the Xtarget Window, time to kill them/mez them etc. 
   	/if (!${Target.ID} || (${Target.ID} && !${Target.AggroHolder.ID})) {
   		/if (${Me.XTarget}>0) {
			/if (${Me.XTarget}==1) { 
  				/xtar 1
				/delay 10
			} else { 
				/xtar 2
				/delay 10 
			}
		}
   	}

  /face fast
  /if (${Me.XTarget}==1) {
	/if (${Target.PctHPs}<90 && !${Me.Combat}) /attack on
    /if (${BardSong}!=1 || !${Me.Casting.ID}) { 
      /stopsong
      /delay 1
      /bc [+t+]Fight [+x+]Song
      /melody ${FightMelody}
      /varset BardSong 1
      /varset Faded 0
    }
  }
  /if (${Me.XTarget}>1 && ${MelodyTimer}<1) {
   | Targeting
   /varcalc NumMez ${Me.XTarget}-1
   /if (${NumMez}>6) /varset NumMez 6
   /varset CurrentTarget 2
   /stopsong
   /xtar 2
   /delay 25s ${Target.Distance}<70||${Me.XTarget}<2
   /delay 2
   /xtar 2
   /delay 25s ${Target.Distance}<70||${Me.XTarget}<2
   /melody ${MezMelody[${NumMez}]}
   /bc Mezzing [+g+]${Target.Name}  [+w+]${MezMelody[${NumMez}]}   ${NumMez}
   /delay 1s
  :mezloop
   /varcalc NumMez ${Me.XTarget}-1
  /if (${CurrentTarget}<${Me.XTarget}) {
    /varcalc CurrentTarget ${CurrentTarget}+1
    /xtar ${CurrentTarget}
    /bc New Mez Target [+g+]${Target.Name} - /xtar = ${CurrentTarget} 
    /delay 3s
    /goto :mezloop
  } else {
    /varcalc MelodyTimer ${MezMelody[${NumMez}].Length}*15-${NumMez}*30
|    /bc ${MelodyTimer} = melody timer  ${NumMez}   ${MezMelody[${NumMez}].Length}
    /goto :killmob
  } 
  /goto :mezloop
 }
 /delay 2
 /goto :killmob
/return

 


Sub SetUp
/declare kk int inner
/declare i int inner
/declare k int inner
  /alert clear 1
  /alert add 1 Gribble
  /alert add 1 adventurer
  /alert add 1 Cogwitz
  /hidecorpse looted
  /bct ${TankName} //alert add 1 Gribble
  /bct ${TankName} //alert add 1 adventurer
  /for kk 1 to ${Group}
    /if (${Group.Member[${kk}].Type.Equal[PC]}) /varcalc ReadysRequired ${ReadysRequired}+1
  /next kk
|  /echo ${ReadysRequired}

  /varset i 1

|  Loads the Path file
  :iloop1
    /varset k 1
    /if (!${Bool[${Ini[${IniPathFile},"Path${i}","PointX${k}"]}]}) {
      /varcalc MaxPaths ${i}-1 
      /echo Number of paths ${MaxPaths}    
      /return
    }
    :kloop1
      /if (!${Bool[${Ini[${IniPathFile},"Path${i}","PointX${k}"]}]}) {
        /varset Path[${i},${k},1] 0
        /varset Path[${i},${k},2] 0
        /varcalc i ${i}+1
        /goto :iloop1
      } else {
    |    /echo ${i} ${k} ${Ini[${IniPathFile},"Path${i}","PointX${k}"]}
        /varset Path[${i},${k},1] ${Ini[${IniPathFile},"Path${i}","PointX${k}"]}
        /varset Path[${i},${k},2] ${Ini[${IniPathFile},"Path${i}","PointY${k}"]}
        /echo ${Path[${i},${k},1]}
        /varcalc k ${k}+1
        
      }
    
  /goto :kloop1

/return

Sub ReturnToGribble
	/declare count int local 0
	
	
	/bc Now comes the fun, getting the whole group back to gribble
        /bca //makecamp off
	/bca //end
	/bca //target ${Me.Name}
	/delay 1s
	/bca //stick 10
	/delay 2s
	/varcalc count ${MaxPaths}-1
	/echo Trying Path ${count}
:PathBack
		/call FollowPathBack ${count}
	/varcalc count ${count}-1
	/if (${count}) /goto :PathBack
	/bc Should be at Gribble.
  	/delay 90s ${Me.CombatState.NotEqual[COMBAT]}
  	/delay 180s !${Me.XTarget}||${Me.XTarget[1].PctHPs}>99 
  	/delay 15s
  	/beep
  	/bca //end
  	| My Tank automatically aggro's things with in range - just turning him off to make sure 

he doesn't do anything silly :)
  	/bct ${TankName} //end
 	/delay 2s
  	/bca //moveto loc 436.9 -282.3
  	/bca //tar Gribble
  	/tar Gribble	
	/delay 5s
  	/delay 20s ${SpawnCount[PC]}==${SpawnCount[PC radius 40]}
  	/keypress H
  	/delay 5s
  	/bca //say back
  	/kickplayers task
  	/delay 5s ${Window[ConfirmationDialogBox].Open}
  	/nomodkey /notify ConfirmationDialogBox Yes_Button leftmouseup
  	/delay 10s
  	/say back
  	/delay 120s ${Zone.ShortName.Equal[deadhills]}
  	/delay 30s
  	/varset CampNum 1
  	/varset ReturnGribble 0
	/mac dead2
/return 

Sub GetInstance
  /tar Gribble
  /delay 10
  /if (${Target.Distance}<50) {
    /say willing
    /delay 2s
    /notify TaskSelectWnd TSEL_TaskList listselect 3
    /delay 2s
    /notify TaskSelectWnd TSEL_AcceptButton leftmouse 3
  } else {
   /bc Gribble is OOR
   /endm
  }
/return

Sub Wait4Ready(int MaxReady)
|  This is a routine I call which waits for every toon to say they are ready to proceed.  I 

normally use this for zoning and moving between camps (I've used the slacker /afol method tho in 

this macro)
 | /echo ${MaxReady} ${NumReady}
  /doevents flush
  :loop
   /doevents
   /delay 1
  /if (${NumReady}<${MaxReady}) /goto :loop
  /bc All toons are [+g+]Ready
  /varset NumReady 0
/return

Sub ZoneIn
/declare kk int inner
 :shortloop
  /tar Gribble
|----------
|
|
|  Insert your /bct commands to role buffs for the characters.  You can do it here (in deadhills) 

b4 you zone in.
|
|----------
|  /bct ${Toon1} //cast "Talisman of the Courageous Rk. II"
|  /bct ${Toon2} //cast "Unified Hand of Certitude"
|  /delay 10s
| Group perfected Leviatation
|  /bct ${Toon1} //alt activate 1666
|  /delay 5
|  /bct ${Toon1} //cast "Talisman of Celerity"
  /delay 32s
  /say leave
  /delay 120s ${Zone.ShortName.Equal[deadhills_errand]}
  /if (!${Zone.ShortName.Equal[deadhills_errand]}) /goto :shortloop
  /keypress ESC
  /delay 10s
  /for kk 1 to ${Group}
      /delay ${Math.Rand[9]}s
      /bct ${Group.Member[${kk}].Name} //mac deadzone.mac
  /next kk
  /echo waiting for readys.
  /call Wait4Ready ${ReadysRequired}

|-------------------
|
|  Or you can do it here, inside the zone
|
|-------------------

| Load up some clickie buffs on toons.
  /bca //useitem 3
  /delay 6
  /bca //useitem 6
  /delay 6
  /bca //useitem 20
  /delay 6
  /bca //useitem 11
  /delay 6
  /bca //useitem 15
  /delay 6
  /return
}

Sub FollowPath(PathNumber)
/declare i int inner
   /varset i 1
   :movecamploop1
     /doevents
     /bc [+Y+]Path : [+y+]${PathNumber}[+Y+]  Point : [+y+]${i}  [+x+]
     /squelch /moveto loc ${Path[${PathNumber},${i},1]} ${Path[${PathNumber},${i},2]}    
     /delay 60s ${MoveTo.Stopped}
  /varcalc i ${i}+1
  /if (${Bool[${Path[${PathNumber},${i},1]}]}) /goto :movecamploop1
/return

Sub SetupCamp
|----------------
|
|  This area is where you send out /bct's to your other toons to set up.  i.e The tank sets up 

ready to receive mobs, you healers set up.
|
|-----------------
  /bca //tar ${TankName}

  /delay 5s
  /bct ${TankName} //keypress ESC
  /delay 10
  /bct ${TankName} //mac ${TankMacro}
  /bct ${Toon1} //mac ${Macro1}
  /bct ${Toon3} //mac ${Macro3}
  /bct ${Toon2} //mac ${Macro2}
  /bct ${LooterName} //hidecorpse looted
  /delay 5
  /bct ${LooterName} //mac ${LooterMacro}
  /delay 5s
/return

Sub PullMobA(PullType, MaxMobs, PullRange, MezRange, NumberMobsToCheck)
|| PullType = 1 = Boastful Bellow,  2 = Sonic Displacement, 4 = Slumber, 8 = Double Pull...  

(bitwise operation)
/declare i int inner
/declare EndOfPath int inner 0
/declare CheckMob int inner 1
/declare PullList string inner
/declare tt int inner 0
  /if (${Zone.ShortName.NotEqual[deadhills_errand]}) {
     /bc Not in the correct zone
     /bca //end
     /end
  }
  /if (!${Bool[${Me.Aura}]}) {
     /stopsong
     /bc Aura stuff.
     /cast ${AuraGem}
     /delay 4s
  }
  /alt activate 212
  /stopsong
  /varset EndOfPath 0
  /varset i 1
  /if (${Me.PctMana}<10) {
        /sit
	/bc Medding for Mana
	:MedIt
     
     /if (${Me.PctMana}<99) /goto :MedIt
   }
   :moveloop
     /bc [+Y+]Path : [+y+]${CampNum}[+Y+]  Point : [+y+]${i}  [+x+]
      /squelch /moveto loc ${Path[${CampNum},${i},1]} ${Path[${CampNum},${i},2]}
     :MoveLoop1
       /doevents

|  This is the grunt of the pulling routine
|  This bit is checking for targets while moving....
       /varset CheckMob ${SpawnCount[NPC radius ${PullRange} zradius ${zrange} los noalert 1]}
       /if (${CheckMob}>${NumberMobsToCheck}) /varset CheckMob ${NumberMobsToCheck}
       /if (${CheckMob}) {
         /for tt 1 to ${CheckMob} 
           /doevents  
           /if (${ReturnGribble}==1 || ${Me.CombatState.Equal[COMBAT]}) {
              /varcalc i ${i}-1
              /goto :ReturnPath
           }
           /tar id ${NearestSpawn[${tt}, NPC los radius ${PullRange} zradius ${zrange} noalert 

1].ID}
           /delay 2s ${Target.ID}==${NearestSpawn[${tt}, NPC los radius ${PullRange} zradius 

${zrange} noalert 1].ID}||${Me.CombatState.Equal[COMBAT]}
           /if (${Faded}<2 && ${Target.Type.Equal[NPC]} && ${Target.LineOfSight}) {
             /if (${PullType}&2 && ${Target.Distance}<140 && ${Me.AltAbilityReady[Sonic 

Displacement]}) {
               /bc Sonic Displace [+t+]${Target.Name}
               /call Cast "Sonic Displacement" alt
             } else {
               /bc Bellow [+t+]${Target.Name}
               /alt activate 199
             }
             /delay 1
           } 
           /if (${Faded}>1 && ${Target.Type.Equal[NPC]} && ${Target.Distance}<200 && 

${Target.LineOfSight}  && ${Me.XTarget}<2) {
            /melody 9  
            /delay 4s ${Me.CombatState.Equal[COMBAT]}
          }      
          /next tt
          }
         }
     /delay 1
    
     /if (!${MoveTo.Stopped}) /goto :MoveLoop1

|  This bit is checking for mobs to pull at the way point.

      /varset CheckMob ${SpawnCount[NPC radius ${PullRange} zradius ${zrange} los noalert 1]}
       /if (${CheckMob}>${NumberMobsToCheck}) /varset CheckMob ${NumberMobsToCheck}
       /if (${CheckMob}) {
         /for tt 1 to ${CheckMob} 
           /doevents
           /if (${ReturnGribble}==1 || ${Me.CombatState.Equal[COMBAT]}) {
              /varcalc i ${i}-1
              /goto :ReturnPath
           } 
           /tar id ${NearestSpawn[${tt}, NPC los radius ${PullRange} zradius ${zrange} noalert 

1].ID}
           /delay 2s ${Target.ID}==${NearestSpawn[${tt}, NPC los radius ${PullRange} zradius 

${zrange} noalert 1].ID}||${Me.CombatState.Equal[COMBAT]}
           /if (${Faded}<2 && ${Target.Type.Equal[NPC]} && ${Target.LineOfSight}) {
            /if (${PullType}&2 && ${Target.Distance}<140 && ${Me.AltAbilityReady[Sonic 

Displacement]}) {
               /bc Sonic Displace [+t+]${Target.Name}
               /call Cast "Sonic Displacement" alt
             } else {
               /bc Bellow [+t+]${Target.Name}
               /alt activate 199
             }
             /delay 4
           }
           /if (${Faded}>1 && ${Target.Type.Equal[NPC]} && ${Target.Distance}<200 && 

${Target.LineOfSight}) {
            /melody 9  
            /delay 4s ${Me.CombatState.Equal[COMBAT]}
          }  
          /next tt
          }
  /varcalc i ${i}+1
| The next line forces a MEZ pull at Point 9 on Path 3 - it's 2 mob just on the bridge close to a 

rise - I don't think it works overly well and have reverted back to Boastful pull
|  /if (${CampNum}==${MaxPaths} && ${i}==9) /varset Faded 4
  /if (${Bool[${Path[${CampNum},${i},1]}]}) /goto :moveloop
  /delay 1s
  /bc End of Path Encounted - No Aggro ${i}
  /varset EndOfPath 1
  /if (${CampNum}==${MaxPaths}) {
    /tar Cogwitz
    /delay 2s ${Target.Name.Find[Cogwitz]}
    /keypress H
    /delay 5
    /keypress H
  }
  /varcalc i ${i}-2
  :ReturnPath
   /stopsong
   /if (${Me.XTarget} && ${i}<10 && ${CampNum}==${MaxPaths} && ${NearestSpawn[1,NPC noalert 

1].Distance}>180) {
  |    /bc pausing..
      /delay 3s ${NearestSpawn[1,NPC noalert 1].Distance}<160 || ${Me.PctHPs}<60
 |     /bc going..
   }
   /if (${i}<1) { 
     /stopsong
     /if (${EndOfPath}==1 && ${CampNum}<${MaxPaths} && ${Me.CombatState.NotEqual[COMBAT]}) {
        		/varcalc CampNum ${CampNum}+1
        		/varset EndOfPath 0
			/bc Should be moving group here. 
			/call CampDone
			/beep
     		}
     /if (${EndOfPath}==1 && ${CampNum}==${MaxPaths}) {   
       /call ReturnToGribble    
     }
     /if (${Faded}) /delay 8s
     /return
   }
   /bc [+Y+]Path : [+y+]${CampNum}[+Y+]  Point : [+y+]${i}  [+x+]
      /squelch /moveto loc ${Path[${CampNum},${i},1]} ${Path[${CampNum},${i},2]}
     :MoveLoop2
       /delay 1
       /doevents
       /if (${Me.XTarget}<2 && ${Target.Buff[${MezSong}].ID}) /alt activate 199
       /if (${i}<3 && ${CampNum}<${MaxPaths} && ${Me.XTarget}>${MaxMobs}) {
         /stopsong
         /alt activate 212
         /varcalc Faded ${Faded}+1
         /delay 2s !${Me.XTarget}
         /varset EndOfPath 0
       }
       /if (${CampNum}==${MaxPaths} && ${i}<2 && ${Me.XTarget}>${MaxMobs}) {
         /stopsong
         /alt activate 212
         /varcalc Faded ${Faded}+1
         /delay 2s !${Me.XTarget}
         /varset EndOfPath 0
       }
      /varset PullList ${Me.XTarget[1].Name}${Me.XTarget[2].Name}${Me.XTarget[3].Name}
       /if (${i}<3 && ${Me.XTarget}==2 && ${PullList.Find[Bloodsucker]}) {
         /stopsong
         /alt activate 212
         /bc Fading Bloodsucker as he is with an Add - ${Me.XTarget}
         /varcalc Faded ${Faded}+1
         /delay 2s !${Me.XTarget}
         /varset EndOfPath 0
       }
     /doevents
     /if (!${MoveTo.Stopped}) /goto :MoveLoop2
     /varcalc i ${i}-1
     /goto :ReturnPath
/return



Sub Event_ToonReady(Line1,ToonName)
  /varcalc NumReady ${NumReady}+1
/return

Sub Event_LootingEvent(Line1, ItemName)
  /varset ItemName ${ItemName.Right[-57]}
  /varset ItemName ${ItemName.Left[-1]}
  /bc Item = ${ItemName}
  /if (${ItemName.Find[Excavation Tools]} || ${ItemName.Find[Dynamite]} || ${ItemName.Find[Xulous 

Spellbook]}) {
     /bc Click item found = ${ItemName}
     /delay 2s   
     /delay 6s ${Me.CombatState.Equal[COMBAT]}
     /bct ${LooterName} //useitem "${ItemName}"
     /delay 6s ${Me.CombatState.Equal[COMBAT]}
     /bct ${LooterName} //useitem "${ItemName}"
     /varset OuterItem ${ItemName}
     /varset ReturnGribble 1
  }
/return

Sub Event_UpdateEvent(Line1, TaskName)
  /varcalc EventStep ${EventStep}+1
  /bc [+m+]${TaskName}[+w+] : finished STEP [+m+]${EventStep}
/return

Sub Event_AggroCall
	/if (${Me.XTarget}==1) {
		/xtar 1
		/delay 10
		/attack on
	}
/return


Sub CampDone
  	/bc Trying to move group. 
| I turn off my tank macro when he moves as he will try and kill things or attempt to return to 

his camp spot.  You might not need to.
  /bca //mqp
  /bca //makecamp off
  /delay 2s
  /bca //tar pc ${Me.Name}
  /delay 15
  /bca //stick 20
  /call FollowPath ${Math.Calc[${CampNum}-1]}
  /delay 15s
| Give a bit of extra time for the slower characters to catch up if needed
  /delay 20s ${SpawnCount[PC]}==${SpawnCount[PC radius 40]}
  /bca //stick off
  /delay 1s
  /bct ${TankName} //target clear
  /bca //mqp
  /bca //makecamp on
  /delay 10
/return

Sub FollowPathBack(PathNumber)
	/declare i int inner
	/declare loop int inner 
   	/varset i 1

:movecamploop2

     	/doevents

  	/varcalc i ${i}+1
  	/if (${Bool[${Path[${PathNumber},${i},1]}]}) /goto :movecamploop2

	/varcalc i ${i}-2

:movecamploop3
		/bc [+Y+]Path : [+y+]${PathNumber}[+Y+]  Point : [+y+]${i}  [+x+]
		/squelch /moveto loc ${Path[${PathNumber},${i},1]} ${Path[${PathNumber},${i},2]}  

  
     		/delay 60s ${MoveTo.Stopped}
		/delay 1s
		/varcalc i ${i}-1
		/if (${i}) /goto :movecamploop3
		/doevents flush
/return

Ahh you'll need this file too (same as my chanter script).

hillsinto2.ini

Rich (BB code):
[Path1]
PointX1=451.14
PointY1=-249.5
PointX2=555.7
PointY2=-271
PointX3=610.6
PointY3=-286.3
[Path2]
PointX1=578.58
PointY1=-276.45
PointX2=620.7
PointY2=-326.9
PointX3=630.5
PointY3=-412
PointX4=696.3
PointY4=-449.4
PointX5=745.2
PointY5=-434.2
PointX6=786
PointY6=-404.5
PointX7=823
PointY7=-328.7
[Path3]
PointX1=795.56
PointY1=-344.56
PointX2=917.8
PointY2=-298.6
PointX3=990.6
PointY3=-256.9
PointX4=1004.7
PointY4=-255
PointX5=1087.7
PointY5=-253
PointX6=1475.99
PointY6=13.51
[Path4]
PointX1=1466.16
PointY1=15.92
PointX1=1512.8
PointY1=27.7
PointX2=1584.83
PointY2=100.28
PointX3=1650.6
PointY3=204.3
PointX4=1631.5
PointY4=328.4
 
Last edited:
when ya posting the sk version <~~ waits with baited breath :)/drooling!

Still running into some issues when going from camp 3 to 4 if you dont pull the pather because it paths out of range it can wipe your group when the SK is moving them since it pauses the macros. I'm looking at making it just use /chase 1 on kiss and /chase 0 after instead of pausing the macros.

To be honest I got it moving the camp up and working perfect but it does the mission around the same time as the other one 25-30m with bard for selos when pulling. The only way we're going to get a faster one really is to have it run 1 path and have the group chase/follow the entire time. Might be able to use /moveto mpause commands every second to search for mobs.
 
Last edited:
I made some more changes to Blitter's original Bard-slow pulling dead2 macro. The changes allow me to drop the task before the final hail and then go get a new one and start the cycle again. I lose the experience from the task, the marks of valor and the coin, but the toons get to keep getting the task for out of the way experience. I added a check to see if the bard was near Gribble after dropping the task. If he was not, he was probably popped out near the far tent. I made a path named "togrib" with mq2advpath (/record then run the path, then /record save togrib) so that the bard could run back near Gribble and not stop the macro "dead" in its tracks.

These start around line 256
Rich (BB code):
| Remming next three lines to repeat the task for continued kill experience. 
|  /keypress h
|  /delay 10s
  /bcaa //say back
|for some reason I become invisible  
  /keypress alt+0
  /say back
| Remming next six lines to repeat the task for continued kill experience.
|  /kickplayers task
|  /delay 5s ${Window[ConfirmationDialogBox].Open}
|  /nomodkey /notify ConfirmationDialogBox Yes_Button leftmouseup
| /delay 10s
|  /tar Gribble
|  /say back
  /delay 120s ${Zone.ShortName.Equal[deadhills]}
  /delay 10s
  /bcaa //taskquit
  /delay 10s
  /varset CampNum 1
  /varset ReturnGribble 0
  /tar gribble
  /if (${Target.Distance}>50) {
  /bc running to Gribble
  /play togrib
  /delay 5s
  } else {
  /bc Starting again
  }
  /mac dead2
/return
 
Last edited:
The experience now flipping the instances is shit, so I have found it is better to run the two Blitter macros, dead.mac and dead2.mac and then go do whatever for an hour and a half. I wanted to make the toons run them together afk for now. The fly in the ointment has been that when the bard dies, it only knew to start one of the macros, but not the other, so I changed my mq2rez command to the following:
Rich (BB code):
[MQ2Rez]
Soundfile=C:\Program Files (x86)\EverMQ\mq2rez.wav
Accept=1
RezCommandOn=1
Command Line=/mac bardstart.mac

This is my bardstart.mac:
Rich (BB code):
#turbo 40
Sub Main
 :Mainloop
/if (${Task.Title.Equal[Into the Hills]}) /mac dead2.mac
	else {
	/if (${Task.Title.Equal[Scouting Ahead]}) /mac dead.mac
	else {
		/if (${Task.Title.Equal[Disrupting the Ritual]}) /mac dead3.mac
		}
		}
/return

I think it works. Now I need to either add a timer to waste 90 mins or make the toons do something else for a bit. Any suggestions to give a rude gesture to the HA changes?
 
Last edited:
Oh yeah, I changed the line that would normally restart dead2.mac to dead.mac. I actually do dead2.mac first and then dead.mac
 
Re: Tweaks to Blitter's &amp;amp;quot;Into the Hills&amp;amp;quot; Macro

For what it is worth, instead of using deadzone.mac, I made a sub section and call it at the appropriate place. What it basically does it start with the last group member on the controller's group list , and tell them to target gribble... stick to him... and then say the keyword to get in. Adjust the delays to lengthen/shorten the amount of time between toons.

Nothing fancy just trying out different stuff for code.

Rich (BB code):
Sub Keyword
|========================================
| has rest of group say keyword to zone in
|========================================
	/declare i int local
	/for i 5 downto 0
	/if (${Spawn[${Spawn[${Group.Member[${i}]}].ID}].Type.Equal[PC]}) {
		/bc [+y+]${Group.Member[${i}].CleanName} [+g+] your turn to zone in!
		/bct ${Group.Member[${i}].CleanName} //target Gribble
		/delay 1s
		/bct ${Group.Member[${i}].CleanName} //stick hold
		/delay 5s
		/bct ${Group.Member[${i}].CleanName} //say leave
		}
	/delay 10s
	/next i	
	/return

inserted roughly

Rich (BB code):
	/delay 30s	
	/bc [+g+]Zoning in
	/call Keyword
	/delay 120s ${Zone.ShortName.Equal[deadhills_errand]}
  	/if (${Zone.ShortName.Not.Equal[deadhills_errand]}) {
		/echo Zone in error... ending
		/bc Zone in error... ending
		/end
		}
	/call LoadIni

_________________________________

While my teams range from beefy to mostly leeches , I came up with a pause function to allow the rest of the group to med up. This way I stopped running the lowbies way short of mana, or if someone died and got ressed, the puller waited for them for a moment. Yes.... it can make the macro take longer to finish..... depending on if the group needs to use the pause function. If they don't... obviously wont add to it at all. I just prefer slow XP to XP loss from wipes =)

Rich (BB code):
Sub Pause
|========================================
| This is the "Pause" feature, change the amount of delay here to fit your preference
|========================================
	/bc [+g+] Pausing 60 seconds for ${Target.CleanName}.
	/if (!${Me.Sitting}) /sit
	/delay 60s
	/return	
	
Sub Status
|========================================
| Checks the Mana and Endurance of each group member
|	 change the minimul amounts you want the pause feature to engage at
|========================================
	/declare DHPause int local
	/declare i int local
:Status
	/if (${Me.Combat} || ${Me.XTarget}) /return
	/varset DHPause 0
	/for i 1 to ${Group.Members}
	/if (${Group.Member[${i}].ID} && (${Select[${Group.Member[${i}].Class.ShortName},SHM,CLR,DRU,WIZ,MAG,ENC,NEC,PAL,SK,BRD,RNG]} && ${Group.Member[${i}].CurrentMana}<50 || ${Select[${Group.Member[${i}].Class.ShortName},WAR,MNK,ROG,BER,SHD,PAL,RNG,BRD,BST]} && ${Group.Member[${i}].PctEndurance}<30)) {
		/if (${Target.ID}!=${Group.Member[${i}].ID}) /target ${Group.Member[${i}]}
		/delay 1s
		/varset DHPause 1
		/call Pause
		}
	/next i	
	/if (${DHPause}==1) /goto :Status
	/return

then put a " /call Status" in where you think appropriate.. I put it in PullMob, so it checks before pulling, as well as camp set up.

- - - Updated - - -

I ought to mention the purpose behind targeting toons with the pause function was from the occasional wonky group window readings after a res, specially from a merc. The mana/end bar will stay low and not update until you target X toon. Hence the targeting and then announcement of which toon.
 
Last edited:
Tweaks to Blitter's "Into the Hills" Macro

Users who are viewing this thread

Back
Top
Cart