• 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

Into the Hills SK Version (1 Viewer)

you know , if you set all the folks using kiss to chase and set the tank to just keep moving forward they will all follow him and move through zone , only times i have died is running back because the mobs are right on him and his back is to them because of him stopping at different locations . seems slow to turn around and bam thats when he goes down.

This seems like a great idea as the SK doesn't do any splitting anyway.
Should make the task that much faster.

Have the SK stop in an area where he can pull with spell or ranged. Pull all that are in range, move to next spot and repeat.
 
This seems like a great idea as the SK doesn't do any splitting anyway.
Should make the task that much faster.

Have the SK stop in an area where he can pull with spell or ranged. Pull all that are in range, move to next spot and repeat.

Easiest way is make 2 paths 1 that goes to the end and 2nd that returns t o the zone in. He would stop everytime he got aggro on something and kill it.
 
DoCommand - Couldn't Parse '/bct
${Group.Member[${kk}].Name} //mac deadzone.mac
is what I'm getting right now.
 
You dont have MQ2EQBC loaded. This requires you use mq2eqbc as that is how it sends commands to your group for everything.
 
Easiest way is make 2 paths 1 that goes to the end and 2nd that returns t o the zone in. He would stop everytime he got aggro on something and kill it.
this would be perfect because as you go the adds can be mez and thus not having to turn your back to them so much decreasing deaths.

- - - Updated - - -

the way i used to run this was sk in hunter mode on kiss assist with a range of 1000 i would pop all in zone hit my bc kiss all the rest were on follow and wed just get dragged thru id come back in half hour they would be at end but it would have been sweet to fully auto it like you have .
 
So I'm going to say this in hoping that I'm not the only one.
how does one go about setting up mq2eqbc?
 
having problems with my alts calling thier kissassists once zoned into instance
get message "Subroutine Main wasnt found"

mqwindoww shows

#CMD [/target TANKNAME]
<TANKNAME> myname //target TANKNAME
#CMD:[/mac Kissassist_MYNAME.ini]
[TANKNAME(msg)] //mac Kissassist_MYNAME.ini
The current Macro has ended
Subroutine Main wasnt found

any ideas?
 
If it is from the sk version download the zip again because that part of the macro does not call any subs.

Rich (BB code):
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.
|
|-----------------
  /delay 5s
  /bca //target ${MainAssist}
  /delay 2s
  /bct ${Toon1} //mac ${Macro1}
  /bct ${Toon2} //mac ${Macro2}
  /bct ${Toon3} //mac ${Macro3}
  /bct ${Toon4} //mac ${Macro4}
  /bct ${Toon5} //mac ${Macro5}
  /delay 5s
/return
 
I'm gonna look into this tomorrow since my SK just dinged 100 finally! Thinking with a good slower and messer he can handle it.
 
having problems with my alts calling thier kissassists once zoned into instance
get message "Subroutine Main wasnt found"

mqwindoww shows

#CMD [/target TANKNAME]
<TANKNAME> myname //target TANKNAME
#CMD:[/mac Kissassist_MYNAME.ini]
[TANKNAME(msg)] //mac Kissassist_MYNAME.ini
The current Macro has ended
Subroutine Main wasnt found

any ideas?

When defining your macro, if it is kissassist, just use kissassist, or even kissassist assist
 
You know beating my head against the wall trying to make this just run one path and resuming after it pulls something instead of restarting the path. Going to take awhile to get it working if i can at all.
 
I know this is a bit off topic but what is the lowest level Bard mez that can be used to Mez these mobs? Working on leveling a bard and just trying to figure out when he can actually help (never played a bard past mid 50's).
 
hows the single path coming along?
he should stop on aggro shouldnt he if so would be easy to drag the rest behind him

- - - Updated - - -

or like i say i did this in hunter mode with kissassist so if there was some way to have kissassist on the sk and just use the macro for movement and hails and resetting that might work as well <` not a coder but has great ideas :)
 
hows the single path coming along?
he should stop on aggro shouldnt he if so would be easy to drag the rest behind him

- - - Updated - - -

or like i say i did this in hunter mode with kissassist so if there was some way to have kissassist on the sk and just use the macro for movement and hails and resetting that might work as well <` not a coder but has great ideas :)

I was exploring this last night. If you use a downshit to start another macro after kiss kills all the mobs it will work. That macro would be the same thing we use now but it would /mac kissassist hunter instead of using the pull routine. I just have to find a variable in the zone that would be consistent and not stop kiss with mobs left up. maybe a if spawncountnpc<=2 (spawn count would only be 2 if you count the NPCs) once all mobs are dead.

${SpawnCount[NPC radius 1500]} might work. Or just a ${SpawnCount[NPC]} The only mobs up in this instance are in that area so that might work.

I'm 99% sure i can get something to work using this way. Only issue i can see is KA consistent with killing everything in the instance. I ran it a few time last night and once it said all mobs dead but there was still one mosquito up.
 
that sounds like the bomb there and would be nice to have kiss working on sk for rebuffs and what not since kiss handles that , but again either way biggest problem i have atm is when he comes back to camp sometimes mobs catch up to him and he dont turn around to face them and gets splatted
and that ends the fun till i see hes standing in pok trying to has buttsex with the brewing merchant :)" sk thinks hes all that :)
 
Tired to load up the mac to give it a shot and it told me it could not find file wait4rez.inc. Any help would be awesome.

THanks

- - - Updated - - -

got the inc
 
that sounds like the bomb there and would be nice to have kiss working on sk for rebuffs and what not since kiss handles that , but again either way biggest problem i have atm is when he comes back to camp sometimes mobs catch up to him and he dont turn around to face them and gets splatted
and that ends the fun till i see hes standing in pok trying to has buttsex with the brewing merchant :)" sk thinks hes all that :)

Do you use a shaman or bard ? My bard keeps selos on my sk and my shaman keeps communion of the cheetah on the other one. I can probably make him /face fast n instead of waiting.
 
scot i run a sk too do you have your downshits for sk and the same spells listed in the ini ?
[Settings]
MainAssist=skname
Aggro=1
StickSetting=35
AssistDistance=50
AssistAt=100
DoDot=1
NumOfDots=1
[Group]
Toon1=wizard
Macro1=kissassist.mac
Toon2=mage
Macro2=kissassist.mac
Toon3=shaman
Macro3=kissassist.mac
Toon4=chanter
Macro4=kissassist.mac
Toon5=null
Macro5=macro5name
[Spells]
PullSpell1=Demand for Power Rk. II
PullSpell2=null
HateSpell1=null
HateSpell2=null
HateSpell3=Null
AeHateSpell1=Repugnance Rk. II
AeHateSpell2=Abhorrence
AeHateSpell3=Loathing Rk. II
NukeSpell1=Dire Insinuation RK. II
NukeSpell2=Touch of Falsin RK. II
LifeTapSpell1=Touch of Klonda RK. II
LifeTapSpell2=Touch of Falsin RK. II
LifeTapSpell3=NULL
DireImplication=Dire Insinuation RK. II
RespiteDisc=Rest Rk. II
Dot1=Dire Stricture RK. II
ChallengeSpell=Demand for Power Rk. II
[Disc]
Defensive1=Grelleth's Carapace Rk. II
Defensive2=Bonebrood Mantle Rk. II
Defensive3=Unholy Guardian Discipline

as you see i went in and only have it using what i have but you can change the stuff here and make sure your ini has yourf toon names where i changed to classes , i did that just to not have my toon names out there:0

- - - Updated - - -

this is from the dh_sk_name.ini make sure you change the name to your sk.

- - - Updated - - -

Do you use a shaman or bard ? My bard keeps selos on my sk and my shaman keeps communion of the cheetah on the other one. I can probably make him /face fast n instead of waiting.
yeah i dont have bard in group i use chanter so i guess ill try to find facefast and change it but ill also try cheeta but i thought cheeta only lasted till you were in combat
 
I am posting a version based on the Enchanter one that moves the camp up after I have proper time to test it.
 
Last edited:
Ya after exploring the options with the moving camp up but that one didn't really finish faster. I will continue to update this one instead.
 
I have modified this one to do the move camp thing, but still working on the logic of the abilities. Still not getting abilities to fire, but will try to work on that to. Here is the code I added to yours william12 to make him move up camps. I did modify some of the aggro abilities and am working on doing some different logic there. I play mine a little different than you I think :)


Rich (BB code):
#turbo 40
#include spell_routines.inc
#include wait4rez.inc

#event ToonReady "<#1> Ready"
#event WarriorEnage "<#1#> Engaging #2#"
#event UpdateEvent "#*#Your task '#1#' has been updated."



Sub Main

  /declare DummyVariable int 1
  /call GeneralDeclares
|  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 dead2sk and it will continue on

  /if (${Defined[Param0]}) /varset CampNum ${Param0}
  /call SetUp
  /if (${Zone.ShortName.Equal[deadhills_errand]}) /goto :killmob
  /call GetInstance
 :SkipZoneIn
  /call ZoneIn
|  /call createcampfire
  /moveto loc 480.4 -251
  /delay 3s
  /delay 10s
  /call SetupCamp
:killmob
  /if (${Me.CombatState.NotEqual[COMBAT]} && ${ReturnGribble}==1) /call ReturnToGribble
     /if (${Me.CombatState.NotEqual[COMBAT]}) {
       /call PullMobA 1 2 160 0 4
    }
  
  /doevents
  /if (${Me.State.Equal[HOVER]}) {
    /varset CampNum 6
  }
  /delay 2
  /doevents
  /if (${Me.XTarget}==0) /goto :killmob

	/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 
			}
		}
   	}
  
	/if (${Me.XTarget}>=1) {
		/call dpsmode
	}
 /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 ${MainAssist} //alert add 1 Gribble
  /bct ${MainAssist} //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 destroycampfire
        /windowstate FellowshipWnd open
        /delay 5
        /nomodkey /notify FellowshipWnd FP_Subwindows tabselect 2
            /nomodkey /notify FellowshipWnd FP_DestroyCampsite leftmouseup
            /delay 5s ${Window[ConfirmationDialogBox].Open}
            /if (${Window[ConfirmationDialogBox].Open}) {
                /nomodkey /notify ConfirmationDialogBox Yes_Button leftmouseup
            }
        /windowstate FellowshipWnd close
        }
/return

Sub createcampfire
        /windowstate FellowshipWnd open
        /delay 5
        /nomodkey /notify FellowshipWnd FP_Subwindows tabselect 2
            /nomodkey /notify FellowshipWnd FP_DestroyCampsite leftmouseup
            /delay 5s ${Window[ConfirmationDialogBox].Open}
            /if (${Window[ConfirmationDialogBox].Open}) {
                /nomodkey /notify ConfirmationDialogBox Yes_Button leftmouseup
            }
        /delay 1s
        }
        /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

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
	/varset Restart 1
/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 2
  } 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.
|
|----------
  /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.

  /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.
|
|-----------------
  /delay 5s
  /bca //target ${MainAssist}
  /delay 2s
  /bct ${Toon1} //mac ${Macro1}
  /bct ${Toon2} //mac ${Macro2}
  /bct ${Toon3} //mac ${Macro3}
  /bct ${Toon4} //mac ${Macro4}
  /bct ${Toon5} //mac ${Macro5}
  /delay 5s
  /delay 25s
/return

Sub PullMobA(PullType, MaxMobs, PullRange, MezRange, NumberMobsToCheck)
|| PullType = 1 = Mindless Hatred  2 = Helix of the Undying, 4 = Ageless Enmity, 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
  /varset EndOfPath 0
  /varset i 1
   :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 1s ${Target.ID}==${NearestSpawn[${tt}, NPC los radius ${PullRange} zradius ${zrange} noalert 1].ID}||${Me.CombatState.Equal[COMBAT]}
           /if (${Target.Type.Equal[NPC]} && ${Target.LineOfSight}) {
             /if (!${Me.Moving} && ${Target.LineOfSight} && ${Target.Distance}<200 && ${Me.SpellReady[${PullSpell1}]}) {
               /bc Casting ${PullSpell1} [+t+]${Target.Name}
	       /cast "${PullSpell1}"
             } else {
 /if (!${Me.Moving} && ${Target.LineOfSight} && ${Target.Distance}<200 && ${Me.SpellReady[${PullSpell2}]}) {
               /bc Casting ${PullSpell2} [+t+]${Target.Name}
/cast "${PullSpell2}"
}
             }
             /delay 1
           } 
           /if (${Target.Type.Equal[NPC]} && ${Target.Distance}<200 && ${Target.LineOfSight}  && ${Me.XTarget}<2) {
            /delay 2s ${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 1s ${Target.ID}==${NearestSpawn[${tt}, NPC los radius ${PullRange} zradius ${zrange} noalert 1].ID}||${Me.CombatState.Equal[COMBAT]}
           /if (${Target.Type.Equal[NPC]} && ${Target.LineOfSight}) {
            /if (!${Me.Moving} && ${Target.LineOfSight} && ${Target.Distance}<200 && ${Me.SpellReady[${PullSpell1}]}) {
		/bc Casting ${PullSpell1} [+t+]${Target.Name}
                /cast "${PullSpell1}"
             } else {
 /if (!${Me.Moving} && ${Target.LineOfSight} && ${Target.Distance}<200 && ${Me.SpellReady[${PullSpell2}]}) {
               /bc Casting ${PullSpell2} [+t+]${Target.Name}
/cast "${PullSpell2}"
}             
	   }
             /delay 4
           }
           /if (${Target.Type.Equal[NPC]} && ${Target.Distance}<200 && ${Target.LineOfSight}) {  
            /delay 2s ${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
   /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) { 
     /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    
     }
     /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
      /varset PullList ${Me.XTarget[1].Name}${Me.XTarget[2].Name}${Me.XTarget[3].Name}
     /doevents
     /if (!${MoveTo.Stopped}) /goto :MoveLoop2
     /varcalc i ${i}-1
     /goto :ReturnPath
/call dpsmode
/return



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


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

Sub Dead
/if (${Window[RespawnWnd].Open}) {
    /nomodkey /notify RespawnWnd RW_OptionsList listselect 1 
    /delay 1s
    /nomodkey /notify RespawnWnd RW_SelectButton leftmouseup
    /delay 2s 
 }
/return

Sub usecampfire
/if (${Me.Fellowship.Campfire} && ${Me.CombatState.Equal[Active]} && ${Cast.Ready[Fellowship Registration Insignia]} && ${Zone.ID}==344) {
/casting "Fellowship Registration Insignia"
/delay 30s
/sit
/delay 180s
/mac dead2sk
}
/return

Sub GetTarget
/declare tempID int local ${Target.ID}
/if (${Me.Moving}) /return
/if (${Me.XTarget}>=1) /xtar 1
/if (!${ExcludeList.Find[${Target.DisplayName}]}) {
   /if ( ( ${Spawn[${tempID}].Type.Equal[npc]} || ( ${Spawn[${tempID}].Type.Equal[pet]} && !${Spawn[${tempID}].Master.Type.Equal[pc]} ) ) && ( ( ${Spawn[pc ${mainTank}].NearestSpawn[radius ${Math.Calc[${AssistDistance}*2]} id ${tempID}].ID} && ${Spawn[pc ${mainTank}].Distance3D}<=${AssistDistance} ) || !${Spawn[pc ${mainTank}].ID} || ${Spawn[pc ${mainTank}].Distance3D}>200 ) && ${tempID}!=${petID} && ( ${aggroAnim.Find[|${Spawn[${tempID}].Animation}|]} || ${Spawn[${tempID}].PctHPs}<${AssistAt} || ${Me.TargetOfTarget.Type.Equal[pc]} || ${Me.TargetOfTarget.Master.Type.Equal[pc]} ) ) {
      /varset validTarget 1
      /varset CurrentTarget ${Target.ID}
   } 
/return

Sub DpsMode
/doevents
/call GetTarget
/varset TempStickSetting ${StickSetting}
/if (${validTarget} && ${Target.PctHPs}<=${AssistAt} && ${Target.Type.Equal[NPC]} && ${Target.Distance} < ${AssistDistance} && ${Target.ID}) /call KillTarget
/return

Sub KillTarget
/doevents
/face fast
/call aggro
/delay 5
/call Attack
/if (${SpawnCount[npc radius 75 zradius 100]}>=3) /call Defensive
/if (${Target.Named}) /call Defensive
/call CheckHealth
/if (!${validTarget} || ${ExcludeList.Find[${Target.DisplayName}]}) /multiline ; /squelch /target clear; /attack off; /return
/if (${Target.Type.Equal["Corpse"]} || !${Target.ID}) /multiline ; /squelch /target clear; /varset validTarget 0; /attack off; /return
/return

Sub Attack
/if (${Me.Sitting}) /squelch /stand
/if (!${Me.Combat}) /attack on
/if (${SpawnCount[npc radius 75 zradius 100]}>=3) /call Defensive
/if (${Target.Named}) /call Defensive
/if (!${Stick.Active}) /squelch /stick ${StickSetting}
/return

Sub Nuke
/if (${Me.Dead}) /Return
/if (${Me.SpellReady[${NukeSpell1}]} && ${Target.ID} && !${Target.Type.Equal["corpse"]} && !${Target.Type.Equal[PC]} && ${Target.Distance} <=50) {
	/cast "${NukeSpell1}"
	/return
}
/if (${Me.SpellReady[${NukeSpell2}]} && ${Target.ID} && !${Target.Type.Equal["corpse"]} && !${Target.Type.Equal[PC]} && ${Target.Distance} <=50) {
	/cast "${NukeSpell2}"
	/return
}
/return


Sub CheckHealth
/if (${Me.Dead}) /return
/if (${Me.PctHPs}<=50 && ${Me.SpellReady[${DireImplication}]} && !${Target.Type.Equal["corpse"]} && ${Target.ID} && !${Target.Type.Equal[PC]}) /cast "${DireImplication}"
/if (${Me.PctHPs}<80 && ${Me.SpellReady[${LifeTapSpell1}]} && !${Target.Type.Equal["corpse"]} && ${Target.ID} && !${Target.Type.Equal[PC]}) /cast "${LifeTapSpell1}"
/if (${Me.PctHPs}<80 && ${Me.SpellReady[${LifeTapSpell2}]} && !${Target.Type.Equal["corpse"]} && ${Target.ID} && !${Target.Type.Equal[PC]}) /cast "${LifeTapSpell2}"
/if (${Me.PctHPs}<20 && ${Me.AltAbilityReady[leech touch]} && !${Target.Type.Equal["corpse"]} && ${Target.ID} && !${Target.Type.Equal[PC]}) /casting "Leech Touch"
/if (${Me.PctMana}<60 && ${Me.AltAbilityReady[Thought Leech]} && !${Target.Type.Equal["corpse"]} && ${Target.ID} && !${Target.Type.Equal[PC]}) /casting "Thought Leech"
/return

Sub Aggro
/declare MobID int local
/declare i int local
/declare mobcount int local
/declare Mobs int local
/if (${Me.Dead}) /return
/if (${SpawnCount[npc radius 75 zradius 100]}>=3) /call Defensive
/if (${Target.Named}) /call Defensive
/if (!${Me.Combat} && ${Target.Distance} <= 35) /attack on
/if (${Target.Distance}<35 && ${Me.Casting.Name.Equal[NULL]} && ${Me.PctAggro} < 100 && ${Me.AbilityReady[Taunt]}) /doability Taunt
/call CheckHealth
/if (${Me.XTarget}<2 && ${Target.Distance}<75 && ${Target.PctHPs}<98 && ${Me.SpellReady[${HateSpell1}]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /call once ${HateSpell1}
/if (${Me.SpellReady[${ChallengeSpell}]}) /call once ChallengeSpell
/if (${Me.Combat} && ${Melee.AggroMode} && ${Me.PctAggro}<100) {
/if (${Me.Combat} && ${Me.AltAbilityReady[Mindless Hatred]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /casting "Mindless Hatred"
/if (${Me.Combat} && ${Me.AltAbilityReady[Agekess Enmity]} && !${Me.AltAbilityReady[Mindless Hatred]}  && ${Melee.AggroMode} && ${Me.PctAggro}<100) /casting "Agekess Enmity"
/if (${Me.Combat} && ${Me.SpellReady[${HateSpell1}]} && !${Me.AltAbilityReady[Agekess Enmity]} && !${Me.AltAbilityReady[Mindless Hatred]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /cast "${HasteSpell1}"
/if (${Me.Combat} && ${Me.SpellReady[${HateSpell2}]} && !${Me.SpellReady[${HateSpell1}]} && !${Me.AltAbilityReady[Agekess Enmity]} && !${Me.AltAbilityReady[Mindless Hatred]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /cast "${HasteSpell2}"
/if (${Me.Combat} && ${Me.SpellReady[${HateSpell3}]} && !${Me.SpellReady[${HateSpell2}]} && !${Me.SpellReady[${HateSpell1}]} && !${Me.AltAbilityReady[Agekess Enmity]} && !${Me.AltAbilityReady[Mindless Hatred]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /cast "${HasteSpell3}"
}
/call Nuke
/varset Mobs ${SpawnCount[npc radius 75 zradius 100]}
/for i 1 to ${Mobs}
/varset MobID ${NearestSpawn[${i}, npc los Range 5 150 radius 100 zradius 100 targetable].ID}
 /if (${ExcludeList.Find[${Spawn[id ${MobID}].CleanName}]}) /return
 	/varcalc mobcount ${mobcount}+1
/next i
/if (${mobcount} >=3) /cast "${AeHateSpell1}"
/if (${mobcount} >=3 && ${Me.AltAbilityReady[Improved Explosion of spite]} && !${Target.Type.Equal["corpse"]}) {
	/casting  "Improved Explosion of spite"
	} else /if (${mobcount} >=3 && ${Me.AltAbilityReady[Explosion of spite]} && !${Target.Type.Equal["corpse"]}) {
	/casting "Explosion of spite"
	}
/if (${mobcount} >=3 && ${Me.AltAbilityReady[Improved Explosion of hatred]} && !${Target.Type.Equal["corpse"]}) {
	/casting "Improved Explosion of hatred"
	} else /if (${mobcount} >=3 && ${Me.AltAbilityReady[Explosion of hatred]} && !${Target.Type.Equal["corpse"]}) {
	/casting "Explosion of hatred"
	}
/if (${mobcount} >=3 && ${Me.SpellReady[${AeHateSpell2}]}) {
	/cast "${AeHateSpell2}"
	/return
}
/if (${mobcount} >=3 && ${Me.SpellReady[${AeHateSpell3}]}) /cast "${AeHateSpell3}"
/return

Sub Once(subname,int force)
/if (${Last${subname}}==${Target.ID}) /return
/varset CurrentSub ${subname}
/if (!${Defined[${subname}]}) /return
/if (${${subname}Conditions}||!${Defined[${subname}Conditions]}) {
	/if (${FindItem[${${subname}}].InvSlot} && !${FindItem[${${subname}}].Timer}) /call Cast "${${subname}}" item ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
	/if (${Me.AltAbilityReady[${${subname}}]}) /call Cast "${${subname}}" alt ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
	/if (${Me.SpellReady[${${subname}}]}||${Me.Book[${${subname}${loop}}]} && ${force} && !${Me.AltAbility[${${subname}${loop}}]}) /call Cast "${${subname}}" ${DefaultGem} ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
	/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) /varset Last${CurrentSub} ${Target.ID}
	}

/return

Sub Defensive
/if (${SpawnCount[npc radius 75 zradius 100]}>3 && !${Melee.DiscID} && ${Me.CombatAbilityReady[${Defensive1}]} && ${Me.Combat} && ${Me.XTarget}>=3) /disc ${Defensive1}
/if (!${Melee.DiscID} && ${Me.CombatAbilityReady[${Defensive1}]} && ${Me.Combat} && ${Target.Named}) /disc ${Defensive1}
/if (${SpawnCount[npc radius 75 zradius 100]}>3 && !${Melee.DiscID} && ${Me.CombatAbilityReady[${Defensive2}]} && !${Me.CombatAbilityReady[${Defensive1}]} && ${Me.Combat} && ${Me.XTarget}>=3) /disc ${Defensive2}
/if (!${Melee.DiscID} && ${Me.CombatAbilityReady[${Defensive2}]} && !${Me.CombatAbilityReady[${Defensive1}]} && ${Me.Combat} && ${Target.Named}) /disc ${Defensive2}
/if (${SpawnCount[npc radius 75 zradius 100]}>3 && !${Melee.DiscID} && ${Me.CombatAbilityReady[${Defensive3}]} && !${Me.CombatAbilityReady[${Defensive2}]} && !${Me.CombatAbilityReady[${Defensive1}]} && ${Me.Combat} && ${Me.XTarget}>=3) /disc ${Defensive3}
/if (!${Melee.DiscID} && ${Me.CombatAbilityReady[${Defensive3}]} && !${Me.CombatAbilityReady[${Defensive2}]} && !${Me.CombatAbilityReady[${Defensive1}]} && ${Me.Combat} && ${Target.Named}) /disc ${Defensive3}
/return

Sub GeneralDeclares
  /declare iniName string outer DH_SK_${Me.Name}.ini
  /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 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 EventStep int outer 0
  /declare validTarget int outer 0
  /declare TempStickSetting int outer front
  /declare TempAggroTimer timer outer
  /declare p int local
  /declare CurrentSub       string outer
  /declare LastChallengeSpell    string outer
  /declare LastHateSpell1    string outer
  /declare bufftimer timer outer
  /declare MemSpellTimer  timer  outer 0
  /declare buffing int outer 1
  /declare CombatList string outer ${HateSpell1},${HateSpell2},${HateSpell3},${AeHateSpell1},${AeHateSpell2},${AeHateSpell3},${AeHateSpell4},${NukeSpell1},${NukeSpell2},${ChallengeSpell}|
  /declare AeList string outer ${AeHateSpell1},${AeHateSpell2},${AeHateSpell3},${AeHateSpell4}
 /call DeclareIniVar MainAssist string Settings somebody
 /call DeclareIniVar Toon1 string Group somebody
 /call DeclareIniVar Macro1 string Group somebody
 /call DeclareIniVar Toon2 string Group somebody
 /call DeclareIniVar Macro2 string Group somebody
 /call DeclareIniVar Toon3 string Group somebody
 /call DeclareIniVar Macro3 string Group somebody
 /call DeclareIniVar Toon4 string Group somebody
 /call DeclareIniVar Macro4 string Group somebody
 /call DeclareIniVar Toon5 string Group somebody
 /call DeclareIniVar Macro5 string Group somebody
 /call DeclareIniVar Aggro int SETTINGS 0 /doaggro
 /call DeclareIniVar Defensive1 string Disc "Grelleth's Carapace Rk. II"
 /call DeclareIniVar Defensive2 string Disc "Bonebrood Mantle Rk. II"
 /call DeclareIniVar Defensive3 string Disc "Unholy Guardian Discipline"
 /call DeclareIniVar PullSpell1 string Spells "Terror of Vergalid"
 /call DeclareIniVar PullSpell2 string Spells "Terror of Vergalid"
 /call DeclareIniVar HateSpell1 string Spells "Terror of Jelvalak "
 /call DeclareIniVar HateSpell2 string Spells "Terror of the Soulbleeder "
 /call DeclareIniVar HateSpell3 string Spells "Terror of Vergalid"
 /call DeclareIniVar AeHateSpell1 string Spells "Burst of Spite"
 /call DeclareIniVar AeHateSpell2 string Spells "Revile"
 /call DeclareIniVar AeHateSpell3 string Spells "Vilify"
 /call DeclareIniVar ChallengeSpell string Spells "Demand for Power Rk. II"
 /call DeclareIniVar NukeSpell1 string Spells "Malarian Spear"
 /call DeclareIniVar NukeSpell2 string Spells "Rotmarrow Spear"
 /call DeclareIniVar LifeTapSpell1 string Spells "Touch of Tharoff"
 /call DeclareIniVar LifeTapSpell2 string Spells "Touch of Kildrukaun"
 /call DeclareIniVar LifeTapSpell3 string Spells "Touch of Severan"
 /call DeclareIniVar DireImplication string Spells "Dire Implication"
 /call DeclareIniVar RespiteDisc string Spells "Rest"
 /call DeclareIniVar StickSetting string Settings 35 
 /call DeclareIniVar AssistDistance int Settings 100
 /call DeclareIniVar AssistAt int Settings 100 /assistat
 /call DeclareIniVar DoDot int Settings 0 /Dot
 /call DeclareIniVar NumOfDots string Settings 1
 /for p 1 to ${NumOfDots}
	/call DeclareIniVar Dot${p} string Spells Changeme
 /next p
/return



Sub DeclareIniVar(string name,string varType,string section,string value,string alias)
/if ( !${Defined[${name}]} ) /declare ${name} ${varType} outer
/varset ${name} ${Ini[${iniName},${section},${name.Left[1].Upper}${name.Right[-1]},"${value}"]}
/ini "${iniName}" "${section}" "${name.Left[1].Upper}${name.Right[-1]}" "${${name}}"
/if ( ${Defined[alias]} ) /squelch /alias ${alias} /echo set: ${name}
/if (${Me.Book[${Me.Book[${${name}} rk. iii]}].ID}) /varset ${name} ${Me.Book[${Me.Book[${${name}} rk. iii]}].Name} 
/if (${Me.Book[${Me.Book[${${name}} rk. ii]}].ID}) /varset ${name} ${Me.Book[${Me.Book[${${name}} rk. ii]}].Name}
/if (${Me.CombatAbility[${${name}} rk. iii]}) /varset ${name} ${${name}} rk. iii
/if (${Me.CombatAbility[${${name}} rk. ii]}) /varset ${name} ${${name}} rk. ii
/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
 
Ya I got it to move camps but it really wasnt finishing it any faster.

The only real way to make this faster is to have 1 path and have him pause inbetween moves to pull/aggro/tank.

What I was thinking of is calling the 1 path which goes from start to end and using loops and /moveto mpause search for a mob no mob go back to another loop that unpauses move to delay 1s pause again search again.

So

/moveto loc pathfile
/delay 1s
:movepause
/delay 1s
/moveto mpause
:findmob
This is where we would put all the code to find a mob to aggro and if we cant find one we would /goto :moveunpause
:moveunpause
/moveto unpause
/delay 1s
/goto :movepause

This in theory should work, but I have to test the exact code out.
 
Yeah, wife and I were hashing that out earlier. Just take out all the return stuff and have it move forward till the end. I'm working on it, but gotta get my secondary account mezzer up high enough to make it worthwhile.
 
Yeah, wife and I were hashing that out earlier. Just take out all the return stuff and have it move forward till the end. I'm working on it, but gotta get my secondary account mezzer up high enough to make it worthwhile.

Yep don't even return to main sub just keep going with the loops and call all the tanking/mez stuff from them. If you go back to the call pull it resets the path from the start.
 
you lost me at wife and I were hashing that out earlier and I just decided that you are my new hero just on picking a wife you could talk to and she understands said conversations:)
 
Yeah, wife and I were hashing that out earlier. Just take out all the return stuff and have it move forward till the end. I'm working on it, but gotta get my secondary account mezzer up high enough to make it worthwhile.

You can use my mezzer to test this!
 
ahh its wierd but sems like today my stop point is diferrent then before he used to stop closer to zone now its further out but nothing has changed so no clue why
 
I've cleaned up some issues just not ready to post it yet. No progress on it only running 1 path and the group following him though. Need some help getting it to only read 1 path in the ini.
 
I wonder if you had the macro started by the "lowest dps" character that would go from point to point and from there have the tank run in something like KA's hunter mode for a few kills; Pause the hunt; move to the next spot start the macros again, etc. I suggest the lowest dps character because then you would control things from that macro, but would not run an assist macro. Although it might be able to run the mq2bot by PeteSampras,. I simply have not tried that one yet.
 
I wonder if you had the macro started by the "lowest dps" character that would go from point to point and from there have the tank run in something like KA's hunter mode for a few kills; Pause the hunt; move to the next spot start the macros again, etc. I suggest the lowest dps character because then you would control things from that macro, but would not run an assist macro. Although it might be able to run the mq2bot by PeteSampras,. I simply have not tried that one yet.

Using this macro to do it will work fine. I've already tested moveto pause and unpause that will work perfect to follow 1 path kill everything and do the hails. I just can't get it to read 1 path.
 
Into the Hills SK Version

Users who are viewing this thread

Back
Top
Cart