• 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 V 2.0

Status
Not open for further replies.
we had this issue yesterday with a friends and his was just as simple as he had spell buffs mislabeled as item buffs
 
funny you should say that I have never pled for money lol I just enjoy macro questing eq but after I recover from this week I will be more then happy to donate , " school shopping " with 2 teen girls I think they cleaned wallet and tried to even barter said wallet for a scarf!

- - - Updated - - -

is there a way to add unloadeing and loading mq2move after each mission starts to be sure it flows flawlessly?
 
maybe I am doing this wrong, my sk is geared in full latent gear, 30ish AC augs in every slot, 7600ac unbuffed I am currently hunting for the augs gear to get to 10k ac and I am running http://www.redguides.com/community/showthread.php/28122-lvl-100-Shadowknight for my sk with all the AAs and Rank IIs that it requires. My SK loses agro and does not seem to be "sturdy" enough to take the hits in this instance. I am at a catch 22, I need my sk stronger to do these but I need to do these to get my sk stronger...
 
/if (${Me.XTarget}==0) /varset bufftimer2 75s
/bcaa //plugin mq2moveutils unload
/bcaa //plugin mq2moveutils Load
/bca //Chase 1
/bca //doleashtoon 1
this works perfect for me

- - - Updated - - -

pepekeao im running this at 8500ac buffed atm im willing to bet its just something you are overlooking I would check to be sure you have correct agggro spells and do you have anger aug and maybe a faceitem with anger on it?

- - - Updated - - -

after running this awhile im noticing they tend to have a lot of buffs drop off and not rebuffed between runs , I see you have a buffertimer2 75s when they start macros " kissassist"
is that the time I need to lengthen to say 180 secs from 75 to give them more time to complete buffs?
 
/if (${Me.XTarget}==0) /varset bufftimer2 75s
/bcaa //plugin mq2moveutils unload
/bcaa //plugin mq2moveutils Load
/bca //Chase 1
/bca //doleashtoon 1
this works perfect for me

- - - Updated - - -

pepekeao im running this at 8500ac buffed atm im willing to bet its just something you are overlooking I would check to be sure you have correct agggro spells and do you have anger aug and maybe a faceitem with anger on it?

- - - Updated - - -

after running this awhile im noticing they tend to have a lot of buffs drop off and not rebuffed between runs , I see you have a buffertimer2 75s when they start macros " kissassist"
is that the time I need to lengthen to say 180 secs from 75 to give them more time to complete buffs?

Yes bufftimer2 gives you 75s to do your self rebuffs. You can increase it to anything you want.
 
VoT is in the rotation it is always on, my Wiz is just way overgeared and he pulls agro a lot! So I need to fix my SK to keep up
 
will try it, but considering I pull 1 then 1 then 4 mobs when I do it manually I hope this runs it better, 4 is too many for my little sk to take on....

Apparently bringing a 98 chanter is not as good as bringing him at 100, omg I smoked this run now! It was not my SKs fault it was my weak chanter....
 
Anyone having any issues with running this with 3 toon and 3 mercs? I can not seem to get it to work at all, and those I know that run it with all 6 toons no merc it runs great. wondering if there are any settings I can tweek a bit to get it to work
 
hmm I tried to run with mercs but honestly mercs don't do enough to keep up with the pulls imho merc cleric was my first mistake because she was just too wonky on heals soon as I went to pc cleric the world became rainbows and unicorns :)
 
Just set this up today. Only issue I have so far is my SK is non stop pulling and running my druid and cleric oom, they are set to med at 20% in their kissassist inis but never get a chance.... Where would I look to fix this? Before trying this mac I used KA on its own in other zones with no mana issues, this is the first time I have run into this.
 
Just set this up today. Only issue I have so far is my SK is non stop pulling and running my druid and cleric oom, they are set to med at 20% in their kissassist inis but never get a chance.... Where would I look to fix this? Before trying this mac I used KA on its own in other zones with no mana issues, this is the first time I have run into this.

There is a self mana check but not a group one. I guess you could add one for group.
 
There is a self mana check but not a group one. I guess you could add one for group.

I'm pretty new to this, don't have a clue how to do that. Is there a forum post on RG somewhere that explains more in depth on how to do such a thing or should I be looking elsewhere? In general, not just for this particular macro.
 
No I would have to do it or someone who is able to would have to post the changes..

Do you run out of mana after only doing 1 mission ? Or is it after multiple ? Can add a command to make them sit when the SK rebuffs to help.


find

Rich (BB code):
/if (${Me.XTarget}==0) /varset bufftimer2 75s

Change it to

Rich (BB code):
/if (${Me.XTarget}==0) {
/varset bufftimer2 75s
/bca //sit
}
 
No I would have to do it or someone who is able to would have to post the changes..

Do you run out of mana after only doing 1 mission ? Or is it after multiple ? Can add a command to make them sit when the SK rebuffs to help.


find

Rich (BB code):
/if (${Me.XTarget}==0) /varset bufftimer2 75s

Change it to

Rich (BB code):
/if (${Me.XTarget}==0) {
/varset bufftimer2 75s
/bca //sit
}

I was under 15% mana on both the cleric and druid by the time i got to the Named on the first run through the mission, even on mounts. I paused the macro to med up at the Named. I don't know what they were at when the pulls actually started, may have been low from buffing at the start. I am running 6 heroic characters (SK, CLR, DRU, BRD, BST, NEC) that I havent touched since I created them when they were free. I may just have to slow them down a bit on the KA ini side, I used the 85 heroic ini's from the compiled list here. The druid was more DPS but also back up healing. I can probably squeeze more efficiency out of each of them. Wish I wasn't at work!
 
I got this thing setup but when I run the mac it open the task window at Gribble then just sits there and wont grab the task? wtf? it shows me 2 tasks Scouting ahead and into the hills but it does not take one, the mq2 window says "Number of Paths 1"
 
because into the hills is the 3rd task and you have not beat them all before. Either beat scouting ahead or do this.

Rich (BB code):
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

Change it to

Rich (BB code):
Sub GetInstance
  /tar Gribble
  /delay 10
  /if (${Target.Distance}<50) {
    /say willing
    /delay 2s
    /notify TaskSelectWnd TSEL_TaskList listselect 2
    /delay 2s
    /notify TaskSelectWnd TSEL_AcceptButton leftmouse 2
  } else {
   /bc Gribble is OOR
   /endm
  }
/return
 
I have reworked this code to work flawless , Only option id like to add or have added is a Do mana check for group on SK , I played around with it and fucked up the code so I had to remove it , but as far as this code goes , their are some pathing issues with the way it assign's MQ2moveutils - I fixed and removed them and also removed the code for it to read 3 paths , makes the mission take to long , I have fixed this for numerous people on Skype - and can share my ini for the pathing if anyone wants it please pm me , upon Williams approval of me sharing his macro - of course regardless of the tweaks and changes ive made to it -
 
I have reworked this code to work flawless , Only option id like to add or have added is a Do mana check for group on SK , I played around with it and fucked up the code so I had to remove it , but as far as this code goes , their are some pathing issues with the way it assign's MQ2moveutils - I fixed and removed them and also removed the code for it to read 3 paths , makes the mission take to long , I have fixed this for numerous people on Skype - and can share my ini for the pathing if anyone wants it please pm me , upon Williams approval of me sharing his macro - of course regardless of the tweaks and changes ive made to it -

It only reads 1 path. Mission takes 15-20 with proper dps not sure how much shorter it can get. Post what you got though.
 
well with sk - mage - wizard - chanter - druid - cleric I can clear the entire mission in 12.5 minutes with what I use , and no your original macro listed 3 paths , and still does when you first start it , I removed the coding to include the 3 paths mq2moveutils was assigning the starting point of the macro at 72.00 which was way up on the hill , I corrected the pathing to run middle of the road and on corner's he gather's entire mobs not doesn't miss the first 3 on the bridge, will post what I have when I am home from work ,
 
I did some research on "Into the Hills" and found the following quote from a GM:

"The level requirement for Heroic Adventures is 95. You need to meet the minimum requirement level for a Heroic Adventure (or quest, or task, or mission) to receive rewards from completing it."

Basically, it is recommended for level 95 or higher, and you can still get experience if you can finish it at a lower level, but no rewards.
 
Last edited:
I did some research on "Into the Hills" and found the following quote from a GM:

The level requirement for Heroic Adventures is 95. You need to meet the minimum requirement level for a Heroic Adventure (or quest, or task, or mission) to receive rewards from completing it.
You can still get experience if you can finish it at a lower level, but no rewards.

Not true. The requirement is not 95 they made these so 85s can do them. In fact I've done them on 85s and still got currency.


I would love to see what you have wannabe. I've actually rewritten the pull sub just never posted an update. I also removed the check for mobs while moving. Its useless on an SK for now although terrors are instant cast after the next patch so i might re add it. So post what you have ill see if i can add some of it and post a 3.0 version with a check for group mana.
 
Last edited:
this is what I have for now will post a second post for my pathing ini




Rich (BB code):
|Dead2sk Version 2.0

#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."

| Run /mac dead2sk on your SK make sure you setup the INI right or it will not work.
| This will only med if your SK is under 20% mana at the start of every heroic.
| This macro is untested with mercs, but it should still work with them.
| There is a 100s delay at the start of every heroic for rebuffs defined in your ini.  I use 10 and still have 40s left after.
| If you usecampfire make sure you have 3 people in your FS in the group otherwise you will get spammed trying to create a campfire.
| To follow the tank your macros be on auto follow or you must be using kissassist.  This macro will do /bca //chase 1 at the start.

Sub Main
  /declare DummyVariable int 1
  /declare iii int inner
  /echo Into the Hills SK V2.0 Started
  /call GeneralDeclares

  /if (${Defined[Param0]}) /varset CampNum ${Param0}
  /call SetUp
  /if (${Zone.ShortName.Equal[deadhills_errand]}) /goto :mainloop
  /call GetInstance
 :SkipZoneIn
  /call ZoneIn
  /if (${UseCampfire})  /call createcampfire
  /moveto loc 555.7 -271
/delay 3s
  /moveto loc 451.14 -249.5
  /call SetupCamp
/if (${Me.XTarget}==0) /varset bufftimer2 75s
  /bca //chase 1
:mainloop
/if (${bufftimer2}) /call Checkselfbuff
/if (${Me.PctMana}<=20 && !${Me.Combat} && !${Me.XTarget} && !${medding}) {
/varset medding 1
/call med
}
/if (${bufftimer2}) /goto :mainloop
/if (!${bufftimer2} && !${medding}) {
:killmob
  /for iii 1 to 5
/if (${Me.PctMana}<=20 && !${Me.Combat} && !${Me.XTarget} && !${medding}) /return
  /if (${Me.CombatState.NotEqual[COMBAT]} && ${ReturnGribble}==1) /call ReturnToGribble

  /if  (${Group.Member[${iii}].Type.NotEqual[corpse]} && ${CampNum}==1) {
     /if (${Me.CombatState.NotEqual[COMBAT]}) {
       /call PullMobA 1 3 150 0 3
    }
  }
  /next iii
  /doevents
  /if (${Me.State.Equal[HOVER]}) {
    /varset CampNum 6
  }
  /delay 2
  /doevents
  /if (${Me.XTarget}==0) /goto :killmob
  /if (${Me.XTarget}>=1) {
/call dpsmode
 }
  /if (${Target.ID}) /face fast
 /delay 2	
 /goto :killmob
}
}
/return

Sub groupmemberdead
/bc waiting 60s to revive Group Member
/delay 60s
/return

Sub Med
/if (${medding} && !${Me.Sitting}) {
/sit
}
/if (${Me.PctMana}>=80) {
/varset medding 0
}
/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 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
  /delay 90s ${Me.CombatState.NotEqual[COMBAT]}
  /delay 180s !${Me.XTarget}||${Me.XTarget[1].PctHPs}>99 
  /delay 15s
  /beep
  /bca //end
  /delay 2s
  /bca //moveto loc 436.9 -282.3
  /delay 2s
  /bca //tar Gribble
  /delay 2s
  /tar Gribble
  /delay 5s
  /delay 20s ${SpawnCount[PC]}==${SpawnCount[PC radius 40]}
  /keypress H
  /delay 10s
  /bca //say back
  /delay 5s
  /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 dead2sk
/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}


| 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 ${LooterName} //mac ${Macro5}
  /delay 5s
/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
/if (${Me.XTarget}>=1) /goto :Movepause
     /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....
|  This is here incase it tries to pull another mob when it already pulled one.
		/if (${Me.XTarget}) {
		/face fast
		/goto :Movepause
		}
       /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) {
              /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}"
/delay 2s
             } else {
 /if (!${Me.Moving} && ${Target.LineOfSight} && ${Target.Distance}<200 && ${Me.SpellReady[${PullSpell2}]}) {
               /bc Casting ${PullSpell2} [+t+]${Target.Name}
                /cast "${PullSpell2}"
/delay 2s
}
             }
             /delay 4
           } 
           /if (${Target.Type.Equal[NPC]} && ${Target.Distance}<150 && ${Target.LineOfSight}  && ${Me.XTarget}<2) {
            /delay 2s ${Me.CombatState.Equal[COMBAT]}
          }
|  This is here incase it tries to pull another mob when it already pulled one.
		/if (${Me.XTarget}) {
		/face fast
		/target clear
		/goto :Movepause
		} 
          /next tt
          }
         }
     /delay 1
    
     /if (!${MoveTo.Stopped} && !${Me.XTarget}) /goto :MoveLoop1

|  This bit is checking for mobs to pull at the way point.
|  This is here incase it tries to pull another mob when it already pulled one.
		/if (${Me.XTarget}) {
		/face fast
		/goto :Movepause
		}
      /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) {
              /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}"
/delay 2s
             } else {
 /if (!${Me.Moving} && ${Target.LineOfSight} && ${Target.Distance}<200 && ${Me.SpellReady[${PullSpell2}]}) {
               /bc Casting ${PullSpell2} [+t+]${Target.Name}
/cast "${PullSpell2}"
/delay 2s
}            
	   }
             /delay 4
           }
           /if (${Target.Type.Equal[NPC]} && ${Target.Distance}<150 && ${Target.LineOfSight}) {  
            /delay 2s ${Me.CombatState.Equal[COMBAT]}
          }
|  This is here incase it tries to pull another mob when it already pulled one.
		/if (${Me.XTarget}) {
		/face fast
		/target clear
		/goto :Movepause
		}
          /next tt
          }
  /varcalc i ${i}+1
  /if (${Bool[${Path[${CampNum},${i},1]}]}) /goto :MoveLoop
  /delay 1s

| This makes sure you hail the npc at the end of path 1
  /bc End of Path Encounted - No Aggro ${i}
  /varset EndOfPath 1
  /if (${CampNum}==1) {
    /tar Cogwitz
    /delay 2s ${Target.Name.Find[Cogwitz]}
    /keypress H
    /delay 5
    /keypress H
    /delay 1s
    /bca //end
    /delay 2s
    /bca //target ${MainAssist}
    /delay 2s
    /bca //stick 15
    /delay 3s
    /keypress esc
  }
  /varcalc i ${i}-2
  :ReturnPath
   /if (${i}<1) { 
     /if (${EndOfPath}==1 && ${CampNum}==1) {   
       /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
| This pauses moveto and calls dps mode and repeats the loop until nothing is on xtarget.
:Movepause
/moveto pause
:dps
/call dpsmode
/delay 2s
/if (${Me.XTarget}==0) {
/goto :moveloop
}
/goto :dps
/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 GetMob
/declare MobID int local
/declare i int local
/declare MobLvl int local 5
/declare MobToKill int local 0
/declare MobHP int local 100
/declare MobDistance int local ${MobRadius}
/declare MobLocation int local ${MobRadius}
/declare Mobs int local
/declare PriorityMob bool local false
/if (${Target.ID} && ${Target.Type.Equal[npc]} && !${ExcludeList.Find[${Spawn[ID ${Target.ID}].CleanName}]} && !${MaMode}) {
	/varset MobToKill ${Target.ID}
} else /if (${SpawnCount[npc los Range 5 150 radius 50 zradius 50 targetable]} && !${MaMode} ) {
	/varset Mobs ${SpawnCount[npc los Range 5 150 radius 50 zradius 50 targetable]}
	/for i  1 to ${Mobs}
	/varset MobID ${NearestSpawn[${i}, npc los Range 5 150 radius 50 zradius 50 targetable].ID}
	/if (!${PriorityMob} && ${Spawn[id ${MobID}].PctHPs} <= ${MobHP} && ${Spawn[id ${MobID}].Type.Equal[NPC]} && !${ExcludeList.Find[${Spawn[id ${MobID}].CleanName}]} && ${Spawn[id ${MobID}].CleanName.Length}>1 || ${MezzImmuneList.Find[${Spawn[ID ${MobID}].CleanName}]}) {
		/varset MobToKill ${MobID}
		/varset MobLvl ${Spawn[id ${MobID}].Level}
		/varset MobHP ${Spawn[id ${MobID}].PctHPs}
		/if (${MezzImmuneList.Find[${Spawn[ID ${MobID}].CleanName}]} || ${NameList.Find[${Spawn[ID ${MobID}].CleanName}]}) {
			/if (${MezzImmuneList.Find[${Spawn[ID ${MobID}].CleanName}]}) /echo A Mezzimmune Mob Found! ${Spawn[ID ${MobID}].CleanName} 
			/if (${NameList.Find[${Spawn[ID ${MobID}].CleanName}]}) /echo A Named Mob Found! ${Spawn[ID ${MobID}].CleanName} 
			/varset PriorityMob TRUE
		}
	}
	/next i
} else /if (${SpawnCount[npc los Range 5 150 radius ${MobDistance} zradius 50 targetable]} && !${Me.Buff[Resurrection Sickness].ID} && !${MaMode}) {
	/varset Mobs ${SpawnCount[npc los Range 5 150 radius ${MobDistance} zradius 50 targetable]}
	/for i  1 to ${Mobs}
	/varset MobID ${NearestSpawn[${i}, npc los Range 5 150 radius ${MobDistance} zradius 50 targetable].ID}
	/if (${Spawn[id ${MobID}].Distance} < ${MobLocation} && ${Spawn[id ${MobID}].Type.Equal[NPC]} && ${Spawn[id ${MobID}].LineOfSight} && !${ExcludeList.Find[${Spawn[id ${MobID}].CleanName}]} && ${Spawn[id ${MobID}].CleanName.Length}>1 && !${TempIgnoreTimer${MobID}}) {
       /varset MobToKill ${MobID}
       /varset MobLvl ${Spawn[id ${MobID}].Level}
	   /varset MobLocation ${Spawn[id ${MobID}].Distance}
    }
	/next i
} else /if (${SpawnCount[npc los Range 5 150 radius 100 zradius 50 targetable]} && ${MaMode} ) {
	/varset Mobs ${SpawnCount[npc los Range 5 100 radius 150 zradius 50 targetable]}
	/for i 1 to ${Mobs}
	/varset MobID ${NearestSpawn[${i}, npc los Range 5 150 radius 100 zradius 50 targetable].ID}
	/if (!${PriorityMob} && ${Spawn[id ${MobID}].PctHPs} <= ${MobHP} && ${Spawn[id ${MobID}].Type.Equal[NPC]} && !${NameList.Find[${Spawn[id ${MobID}].CleanName}]} && !${ExcludeList.Find[${Spawn[id ${MobID}].CleanName}]} && ${Spawn[id ${MobID}].CleanName.Length}>1 || ${MezzImmuneList.Find[${Spawn[ID ${MobID}].CleanName}]}) {
		/varset MobToKill ${MobID}
		/varset MobLvl ${Spawn[id ${MobID}].Level}
		/varset MobHP ${Spawn[id ${MobID}].PctHPs}
		/if (${MezzImmuneList.Find[${Spawn[ID ${MobID}].CleanName}]}) {
			/if (${MezzImmuneList.Find[${Spawn[ID ${MobID}].CleanName}]}) /echo A Mezzimmune Mob Found! ${Spawn[ID ${MobID}].CleanName} 
			/varset PriorityMob TRUE
		}
	}
	/next i
} else /if (${SpawnCount[pet los Range 1 150 radius 50 zradius 50 targetable]} ) {
	/varset Mobs ${SpawnCount[pet los Range 1 150 radius 50 zradius 50 targetable]}
	/for i 1 to ${Mobs}
	/varset MobID ${NearestSpawn[${i}, pet los Range 1 150 radius 50 zradius 50 targetable].ID}
	/if (${Spawn[${Spawn[${MobID}].Master}].Type.Equal[Corpse]}) /varset MobToKill ${MobID}
	/next i	
}
	
/if (${Spawn[${MobToKill}].Type.NotEqual[Aura]} && ${MobToKill}) {
	/target id  ${MobToKill}
    /varset validTarget 1
    /varset TempAggroTimer 20s
    /varset CantHit 0
    /varset CurrentTarget ${Target.ID}
    /if (${Target.ID}) /squelch /face fast
	/if (!${Defined[TempIgnoreTimer${MobToKill}]}) /declare TempIgnoreTimer${MobToKill} timer outer
} 
/delay 1s ${Target.Type.Equal[NPC]} || ${Target.Type.Equal[pet]}
/return

Sub GetTarget
/declare tempID int local ${Target.ID}
/if (${Me.Moving}) /return
/if (${Target.Type.Equal["Corpse"]}) /target clear
/if (!${Target.ID} && ${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
/if (${Target.CleanName.Equal[Gribble Grobblenobber]}) {
/keypress esc
/call GetTarget
}
/varset TempStickSetting ${StickSetting}
/if (${validTarget} && ${Target.PctHPs}<=${AssistAt} && ${Target.Type.Equal[NPC]} && ${Target.Distance} < ${AssistDistance} && ${Target.ID}) /call KillTarget
/if (${Me.PctAggro}==0 && ${Me.XTarget}>=1 && ${Target.Distance}<=200 && ${Me.SpellReady[${HateSpell3}]} && ${Melee.AggroMode}) /call once ${HateSpell3}
/return

Sub KillTarget
/doevents
/face fast
/delay 4
/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
/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
}
/if (${Me.AltAbilityReady[Ragged Bite of Agony]} && !${Me.Moving} && !${Target.Type.Equal["corpse"]}) /casting "Ragged Bite of Agony"
/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}<75 && ${Me.SpellReady[${LifeTapSpell1}]} && !${Target.Type.Equal["corpse"]} && ${Target.ID} && !${Target.Type.Equal[PC]}) /cast "${LifeTapSpell1}"
/if (${Me.PctHPs}<75 && ${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
/if (${Me.XTarget}<2 && ${Target.Distance}<75 && ${Target.PctHPs}<98 && ${Me.SpellReady[${HateSpell1}]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /call once ${HateSpell1}
/if (${Me.XTarget}<2 && ${Me.SpellReady[${ChallengeSpell}]}) /call once ChallengeSpell
/if (${Me.Combat} && ${Me.AltAbilityReady[Mindless Hatred]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /casting "Mindless Hatred"
/if (${Me.Combat} && ${Me.AltAbilityReady[Ageless Enmity]} && !${Me.AltAbilityReady[Mindless Hatred]}  && ${Melee.AggroMode} && ${Me.PctAggro}<100) /casting "Ageless Enmity"
/if (${Me.Combat} && ${Me.SpellReady[${HateSpell1}]} && !${Me.AltAbilityReady[Ageless Enmity]} && !${Me.AltAbilityReady[Mindless Hatred]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /cast "${HateSpell1}"
/if (${Me.Combat} && ${Me.SpellReady[${HateSpell2}]} && !${Me.SpellReady[${HateSpell1}]} && !${Me.AltAbilityReady[Ageless Enmity]} && !${Me.AltAbilityReady[Mindless Hatred]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /cast "${HateSpell2}"
/if (${Me.Combat} && ${Me.SpellReady[${HateSpell3}]} && !${Me.SpellReady[${HateSpell2}]} && !${Me.SpellReady[${HateSpell1}]} && !${Me.AltAbilityReady[Ageless Enmity]} && !${Me.AltAbilityReady[Mindless Hatred]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /cast "${HateSpell3}"
/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} >=4 && ${Me.AltAbilityReady[Improved Explosion of spite]} && !${Target.Type.Equal["corpse"]}) {
	/casting  "Improved Explosion of spite"
	} else /if (${mobcount} >=4 && ${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) /cast "${AeHateSpell1}"
/if (${mobcount} >=6 && ${Me.SpellReady[${AeHateSpell2}]}) /cast "${AeHateSpell2}"
/if (${mobcount} >=8 && ${Me.SpellReady[${AeHateSpell3}]}) /cast "${AeHateSpell3}"
/call CheckHealth
/call Nuke
/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 hillsinto_sk.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 TempIgnoreTimer timer outer
  /declare TempAggroTimer timer outer
  /declare p int local
  /declare CurrentSub       string outer
  /declare LastChallengeSpell    string outer
  /declare LastHateSpell1    string outer
  /declare bufftimer timer outer 0
  /declare bufftimer2 timer outer 0
  /declare MemSpellTimer  timer  outer 0
  /declare medding int outer 0
  /declare CantHit int outer
  /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 LooterName string Group somebody
 /call DeclareIniVar Macro5 string Group somebody
 /call DeclareIniVar Aggro int Settings 0 /doaggro
 /call DeclareIniVar UseCampfire int Settings 0
 /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
 /call DeclareIniVar BuffGem string Spells "12"
 /call DeclareIniVar NumSelfBuff string SelfBuffs 5
 /if (${NumSelfBuff}) {
	/for p 1 to ${NumSelfBuff}
	/call DeclareIniVar selfBuff${p} string SelfBuffs ChangeMe
	/if (${Me.Class.Name.Equal[cleric]} || ${Me.Class.Name.Equal[Shaman]}) {
		/call DeclareIniVar selfBuffToCheck${p} string SelfBuffs ${selfBuff${p}}
		} else  {
		/declare selfBuffToCheck${p}  string outer ${selfBuff${p}}
		}
	/call DeclareIniVar SelfType${p} string SelfBuffs 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 CastItemClicky(string sItemClicky)
/if (!${FindItem[=${sItemClicky}].ID}) {
	/if (!${ItemTimer}) {
		/call CreateTImer ItemTimer
		/echo You don't seem to have ${sItemClicky} in your Inventory. Check inventory and Ini Spelling.
		/varset ItemTimer 60s
		}
	/return
	}
/declare OldItem string local
|/echo Need to cast ${sItemClicky} and its Worn ${FindItem[${sItemClicky}].EffectType.Equal[Click Worn]} and itemSlot ${FindItem["${sItemClicky}"].InvSlot}
/if (${FindItem[${sItemClicky}].EffectType.Equal[Click Worn]} && ${FindItem[${sItemClicky}].InvSlot} || !${Me.HaveExpansion[Veil of Alaris]}) {
	/varset OldItem ${Me.Inventory[${FindItem[${sItemClicky}].WornSlot[1].ID}].Name}
    /exchange "${sItemClicky}" ${FindItem[${sItemClicky}].WornSlot[1].ID}
	/Echo Using ${sItemClicky} Clicky
    /nomodkey /itemnotify ${FindItem["${sItemClicky}"].InvSlot} rightmouseup
    /delay ${Math.Calc[${FindItem[${sItemClicky}].CastTime}+1]}s
    /timed 10 /exchange "${OldItem}" ${FindItem[${OldItem}].WornSlot[1].ID}
    /delay 5s ${Me.Inventory[${FindItem[${OldItem}].WornSlot[1].ID}].Name.Equal[${OldItem}]}
  } else {
    /Echo Using ${sItemClicky} Clicky
    /if (!${me.Casting.ID}) /nomodkey /itemnotify ${FindItem["${sItemClicky}"].InvSlot} rightmouseup
    /delay ${Math.Calc[${FindItem[${sItemClicky}].CastTime}+1]}s
  }
/return

Sub CheckBuffies(string MySub)
/declare a int local
/for a 1 to ${NumSelfBuff}
    /if ( ${selfBuff${a}.NotEqual[NULL]} && ${SelfType${a}.Equal[item]} && ${FindItem[=${selfBuff${a}}].ID} && ${Me.Buff[${FindItem[=${selfBuff${a}}].Spell.Name}].Duration}<4 && !${FindItem[=${selfBuff${a}}].Timer}) {
       /if (!${Spell[${FindItem[=${selfBuff${a}}].Spell.Name}].Stacks[2]}) /goto :SkipBuff
		/call CastItemClicky "${selfBuff${a}}"
    } else /if ( ${Me.Book[${selfBuff${a}}]} && ${SelfType${a}.Find[gem]} && ${selfBuff${a}.NotEqual[NULL]} && ${Spell[${selfBuff${a}}].Mana} < ${Me.CurrentMana} && !${Me.Class.Name.Equal[bard]} ) {
      /if ( !${Me.Buff[${selfBuffToCheck${a}}].ID} || ${Me.Buff[${selfBuffToCheck${a}}].Duration} < 4 ) {
         /if (!${Spell[${selfBuff${a}}].Stacks[2]}) /goto :SkipBuff
		 /if (!${Me.Gem[${selfBuff${a}}]})  /call MemSpell "${selfBuff${a}}" ${SelfType${a}}     
		 /if (${Me.SpellReady[${selfBuff${a}}]}) {
			/if (${Spell[${selfBuff${a}}].TargetType.Find[Single]}) /target myself
			/if (${Bool[${MySub}]}) /call Cast "${selfBuff${a}}" "${SelfType${a}}" 0 ${MySub}
			/if (!${Bool[${MySub}]}) /call Cast "${selfBuff${a}}" "${SelfType${a}}" 0 
      /return
      }
    }
	}
    :SkipBuff
  /next a
/return

Sub Checkselfbuff
/call CheckBuffies
/varset bufftimer 10s
/return

Sub MemSpell(SpellName,SpellGem)
/if (${MemSpellTimer} || !${Me.Book[${SpellName}]}) {
	/if (!${Me.Book[${SpellName}]} && !${SpellTimer}) {
	/call CreateTimer SpellTimer
	/Echo You don't have ${SpellName} in your Spell book. Check your ini for correct spelling.
	/varset SpellTimer 5s
	}
	/return
}
/if (${SpellGem.Length}==1)	/memspell ${SpellGem.Right[1]} "${SpellName}"
/if (${SpellGem.Length}==2)	/memspell ${SpellGem.Right[2]} "${SpellName}"
/if (${SpellGem.Length}==4)	/memspell ${SpellGem.Right[1]} "${SpellName}"
/if (${SpellGem.Length}==5)	/memspell ${SpellGem.Right[2]} "${SpellName}"
/delay 5s ${Me.Gem[${SpellName}]}
/varset  MemSpellTimer ${Math.Calc[${Spell[${SpellName}].RecastTime}+15]}S
/return

- - - Updated - - -

Rich (BB code):
[Path1]
PointX1=451.14
PointY1=-249.5
PointX2=570.6
PointY2=-255
PointX3=610.6
PointY3=-286.3
PointX4=630.5
PointY4=-412
PointX5=696.3
PointY5=-449.4
PointX6=745.2
PointY6=-434.2
PointX7=786
PointY7=-404.5
PointX8=823
PointY8=-328.7
PointX9=854.88
PointY9=-332.48
PointX10=968.81
PointY10=-297.95
PointX11=1046.27
PointY11=-270.66
PointX12=1087.7
PointY12=-253
PointX13=1224.47
PointY13=-183.30
PointX14=1332.78
PointY14=-105.27
PointX15=1512.8
PointY15=27.7
PointX16=1610
PointY16=127.7
PointX17=1650.6
PointY17=204.3
PointX18=1631.5
PointY18=328.4

- - - Updated - - -

everything is pretty much the same of what you had , I just redid the pull code a tad bit to eastablish a better pull length in the beginging of the mission which seemed to be giving 99 % of the people here issues because lets face it not everyone has a almost damn near 11k ac unbuffed sk and can handle 5-10 mobs at a time , I didn't do much tweaking to what you had other then that and how he started out in the beginging


Your original code had the sk Zone in , Call the toons in . start the macs on them , Run up Start the mission , and he would freeze , or get glitched by pulling to many mobs and them force him up the hill all the way because the starting point was up on the hill some , Also Made it to where , Sk zone's in , moves up starts to mission comes back to the tooons , starts the macro's and then runs Center path of the road to the mobs ( as I said ) pathing was the only thing I corrected in some of the code Nothing else I changed other then the reaction times he has in the corner's and pathing

Just completed into the hills missions
Group set up

Sk
Wizard
Mage
chanter
Cleric
Druid

12.5 minute's start to finish

their are a few points I can help people with on with set up of the Sk ini , and the caster's Kissassist ini Also I have Added a doleashtoon Feature To Fastheal3.0 where the Cleric will follow the SK , as it is more suitable for me , for as many mobs as I pull for reaction times as Nomadmans raidassist healing still can not heal like I need , nore kissassis ( as I said with this I did for dead2sk ) I will share upon approval of noobhaxxor let me know what you think William maybe you and I can work together on some more modifications ( GROUP mana check ) similar to kissassist would make this macro a flawless piece of work .

Just a update my toons have been running this macro since I tweaked it now for 11 days straight

10.5k coins on all toons

wizard went from 6600 aa's to now 9133
druid went from 4500 aa's to now 7322
chanter went from 8k aa;s to now max 12k
 
im confused I don't see any changes.

I compared yours and the one on the first page using notepad ++ they're the exact same file besides

/bca //doleashtoon 1

so what exactly did you change ? No idea how you're doing this in 12.5 minutes from start to finish your dps seems average in that group and the macro has no changes neither does the path.

Group mana check is easy. Just add a check at the top of the pull sub inside moveloop and add a loop at the bottom that it will keep repeating until everyone in the group is above a % you set.

Ill go in with a raid zerker/rogue and group rogue and only finish it in 15 and that group is over 100k dps.
 
been doin this with merc clerics, but have a cleric i would like to lvl up, would a cleric group geared (latent etheric) with rk11 spells be good enough?
 
My sk wizard and mage are all cotf raid geared wtf do. I need to lie for , i corrected the pulling code and cleaned it up it is not the same i can assure u many of people on redguides i habe fixed via teamviewer
 
My sk wizard and mage are all cotf raid geared wtf do. I need to lie for , i corrected the pulling code and cleaned it up it is not the same i can assure u many of people on redguides i habe fixed via teamviewer

Nah man not saying that if they're in raid gear that explains why it only takes 12.5m. I Just don't see any difference in the files. Notepad ++ literally compares them letter for letter and there is no difference so I cant see what you changed in the pull code.

This is from your post
Rich (BB code):
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
/if (${Me.XTarget}>=1) /goto :Movepause
     /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....
|  This is here incase it tries to pull another mob when it already pulled one.
		/if (${Me.XTarget}) {
		/face fast
		/goto :Movepause
		}
       /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) {
              /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}"
/delay 2s
             } else {
 /if (!${Me.Moving} && ${Target.LineOfSight} && ${Target.Distance}<200 && ${Me.SpellReady[${PullSpell2}]}) {
               /bc Casting ${PullSpell2} [+t+]${Target.Name}
                /cast "${PullSpell2}"
/delay 2s
}
             }
             /delay 4
           } 
           /if (${Target.Type.Equal[NPC]} && ${Target.Distance}<150 && ${Target.LineOfSight}  && ${Me.XTarget}<2) {
            /delay 2s ${Me.CombatState.Equal[COMBAT]}
          }
|  This is here incase it tries to pull another mob when it already pulled one.
		/if (${Me.XTarget}) {
		/face fast
		/target clear
		/goto :Movepause
		} 
          /next tt
          }
         }
     /delay 1
    
     /if (!${MoveTo.Stopped} && !${Me.XTarget}) /goto :MoveLoop1

|  This bit is checking for mobs to pull at the way point.
|  This is here incase it tries to pull another mob when it already pulled one.
		/if (${Me.XTarget}) {
		/face fast
		/goto :Movepause
		}
      /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) {
              /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}"
/delay 2s
             } else {
 /if (!${Me.Moving} && ${Target.LineOfSight} && ${Target.Distance}<200 && ${Me.SpellReady[${PullSpell2}]}) {
               /bc Casting ${PullSpell2} [+t+]${Target.Name}
/cast "${PullSpell2}"
/delay 2s
}            
	   }
             /delay 4
           }
           /if (${Target.Type.Equal[NPC]} && ${Target.Distance}<150 && ${Target.LineOfSight}) {  
            /delay 2s ${Me.CombatState.Equal[COMBAT]}
          }
|  This is here incase it tries to pull another mob when it already pulled one.
		/if (${Me.XTarget}) {
		/face fast
		/target clear
		/goto :Movepause
		}
          /next tt
          }
  /varcalc i ${i}+1
  /if (${Bool[${Path[${CampNum},${i},1]}]}) /goto :MoveLoop
  /delay 1s

| This makes sure you hail the npc at the end of path 1
  /bc End of Path Encounted - No Aggro ${i}
  /varset EndOfPath 1
  /if (${CampNum}==1) {
    /tar Cogwitz
    /delay 2s ${Target.Name.Find[Cogwitz]}
    /keypress H
    /delay 5
    /keypress H
    /delay 1s
    /bca //end
    /delay 2s
    /bca //target ${MainAssist}
    /delay 2s
    /bca //stick 15
    /delay 3s
    /keypress esc
  }
  /varcalc i ${i}-2
  :ReturnPath
   /if (${i}<1) { 
     /if (${EndOfPath}==1 && ${CampNum}==1) {   
       /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
| This pauses moveto and calls dps mode and repeats the loop until nothing is on xtarget.
:Movepause
/moveto pause
:dps
/call dpsmode
/delay 2s
/if (${Me.XTarget}==0) {
/goto :moveloop
}
/goto :dps
/return

This is from the dead2sk on the 1st page.

Rich (BB code):
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
/if (${Me.XTarget}>=1) /goto :Movepause
     /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....
|  This is here incase it tries to pull another mob when it already pulled one.
		/if (${Me.XTarget}) {
		/face fast
		/goto :Movepause
		}
       /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) {
              /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}"
/delay 2s
             } else {
 /if (!${Me.Moving} && ${Target.LineOfSight} && ${Target.Distance}<200 && ${Me.SpellReady[${PullSpell2}]}) {
               /bc Casting ${PullSpell2} [+t+]${Target.Name}
                /cast "${PullSpell2}"
/delay 2s
}
             }
             /delay 4
           } 
           /if (${Target.Type.Equal[NPC]} && ${Target.Distance}<150 && ${Target.LineOfSight}  && ${Me.XTarget}<2) {
            /delay 2s ${Me.CombatState.Equal[COMBAT]}
          }
|  This is here incase it tries to pull another mob when it already pulled one.
		/if (${Me.XTarget}) {
		/face fast
		/target clear
		/goto :Movepause
		} 
          /next tt
          }
         }
     /delay 1
    
     /if (!${MoveTo.Stopped} && !${Me.XTarget}) /goto :MoveLoop1

|  This bit is checking for mobs to pull at the way point.
|  This is here incase it tries to pull another mob when it already pulled one.
		/if (${Me.XTarget}) {
		/face fast
		/goto :Movepause
		}
      /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) {
              /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}"
/delay 2s
             } else {
 /if (!${Me.Moving} && ${Target.LineOfSight} && ${Target.Distance}<200 && ${Me.SpellReady[${PullSpell2}]}) {
               /bc Casting ${PullSpell2} [+t+]${Target.Name}
/cast "${PullSpell2}"
/delay 2s
}            
	   }
             /delay 4
           }
           /if (${Target.Type.Equal[NPC]} && ${Target.Distance}<150 && ${Target.LineOfSight}) {  
            /delay 2s ${Me.CombatState.Equal[COMBAT]}
          }
|  This is here incase it tries to pull another mob when it already pulled one.
		/if (${Me.XTarget}) {
		/face fast
		/target clear
		/goto :Movepause
		}
          /next tt
          }
  /varcalc i ${i}+1
  /if (${Bool[${Path[${CampNum},${i},1]}]}) /goto :MoveLoop
  /delay 1s

| This makes sure you hail the npc at the end of path 1
  /bc End of Path Encounted - No Aggro ${i}
  /varset EndOfPath 1
  /if (${CampNum}==1) {
    /tar Cogwitz
    /delay 2s ${Target.Name.Find[Cogwitz]}
    /keypress H
    /delay 5
    /keypress H
    /delay 1s
    /bca //end
    /delay 2s
    /bca //target ${MainAssist}
    /delay 2s
    /bca //stick 15
    /delay 3s
    /keypress esc
  }
  /varcalc i ${i}-2
  :ReturnPath
   /if (${i}<1) { 
     /if (${EndOfPath}==1 && ${CampNum}==1) {   
       /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
| This pauses moveto and calls dps mode and repeats the loop until nothing is on xtarget.
:Movepause
/moveto pause
:dps
/call dpsmode
/delay 2s
/if (${Me.XTarget}==0) {
/goto :moveloop
}
/goto :dps
/return

There is no difference letter for letter line for line they're the same. Notepad ++ compares word for word there is nothing different in the entire file compared to the one on the 1st page.

So maybe you posted the wrong file because there is no change here. Even the pathing locations are exact same locations. So what change in pulling did you do ?

- - - Updated - - -

Just to clarify. It will miss mobs more often because of this

/call PullMobA 1 3 150 0 3

That makes it so you only check 3 mobs to pull every time it moves. You also have range set to 150 when spell range on SK pull is 200 + focus so 230 ish with group focus.

I use

/call PullMobA 1 8 240 0 5
 
If I wanted to set up voice of thule in the buffs what would I label it as? Or would I need to set it up as a downshit and if that's the case anyone have one written or an example of how to make it target yourself?
 
holyshit=/if (${Me.CombatState.Equal[COMBAT]} &&!${Me.Buff[Voice of Thule].ID} && ${Me.AltAbilityReady[Voice of Thule]}) /multiline ; /target TANKNAMEHERE ; /alt act 7000

this is the one I use and it works great
 
im confused I don't see any changes.

I compared yours and the one on the first page using notepad ++ they're the exact same file besides

/bca //doleashtoon 1

so what exactly did you change ? No idea how you're doing this in 12.5 minutes from start to finish your dps seems average in that group and the macro has no changes neither does the path.

Group mana check is easy. Just add a check at the top of the pull sub inside moveloop and add a loop at the bottom that it will keep repeating until everyone in the group is above a % you set.

Ill go in with a raid zerker/rogue and group rogue and only finish it in 15 and that group is over 100k dps.

william12, My group ran it successfully yesterday. Problem I noticed is my cleric is only 97 and still in heroic gear. Where and how would I put a wait or mana routine so my SK wont pull unless everyone is above say 50% mana?

Thank you.
 
Into the Hills SK V 2.0
Status
Not open for further replies.

Users who are viewing this thread

Back
Top
Cart