Ran great yesterday but I got the update and now its pathing want to heck any thought?
its a do command that red in the window
post what command it is.
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.

Ran great yesterday but I got the update and now its pathing want to heck any thought?
its a do command that red in the window
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 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.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.
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
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?

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![]()
" sk thinks hes all that 
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
![]()
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 combatDo 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.
#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
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.
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.
