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.

[General]
KissAssistVer=8.4.2
Role=Assist
CampRadius=30
CampRadiusExceed=400
ReturnToCamp=1
ChaseAssist=0
ChaseDistance=25
MedOn=1
MedStart=40
MedCombat=0
LootOn=1
RezAcceptOn=1
AcceptInvitesOn=1
GroupWatchOn=0
EQBCOn=1
IRCOn=0
MiscGem=8
HoTTOn=0
CampfireOn=0
[Buffs]
BuffsOn=1
Buffs1=NULL
Buffs2=NULL
Buffs3=NULL
Buffs4=NULL
Buffs5=NULL
Buffs6=NULL
Buffs7=NULL
Buffs8=NULL
Buffs9=NULL
Buffs10=NULL
Buffs11=NULL
Buffs12=Fourth Wind|End|60
Buffs13=NULL
Buffs14=NULL
Buffs15=NULL
Buffs16=NULL
Buffs17=NULL
Buffs18=NULL
Buffs19=NULL
Buffs20=NULL
RebuffOn=1
ChecKBuffsTimer=20
[Melee]
AssistAt=98
MeleeOn=1
FaceMobOn=1
MeleeDistance=75
StickHow=snaproll
AutoFireOn=0
[AE]
AEOn=0
AERadius=50
AE1=NULL
AE2=NULL
AE3=NULL
AE4=NULL
AE5=NULL
[DPS]
DPSOn=1
DPSSkip=20
DPSInterval=2
DPS1=Frenzy|98
DPS2=Overpowering Frenzy|98
DPS3=Eradicator's Volley|98
DPS4=Vigorous Axe Throw|98
DPS5=Axe of Rallos|98
DPS6=NULL
DPS7=NULL
DPS8=NULL
DPS9=NULL
DPS10=NULL
DPS11=NULL
DPS12=NULL
DPS13=NULL
DPS14=NULL
DPS15=NULL
[Aggro]
AggroOn=0
Aggro1=NULL
Aggro2=NULL
Aggro3=NULL
[Heals]
Help=Format Spell|% to heal at i.e. Devout Light Rk. II|50
HealsOn=0
Heals1=NULL
Heals2=NULL
Heals3=NULL
Heals4=NULL
Heals5=NULL
XTarHeal=0
[Cures]
CuresOn=0
Cures1=NULL
Cures2=NULL
Cures3=NULL
Cures4=NULL
Cures5=NULL
[Burn]
BurnText=Decepticons Attack
BurnAllNamed=1
Burn1=Savage Spirit
Burn2=Reckless Abandon
Burn3=Fundament: Third Spire of Savagery
Burn4=NULL
Burn5=NULL
Burn6=NULL
Burn7=NULL
Burn8=NULL
Burn9=NULL
Burn10=NULL
Burn11=NULL
Burn12=NULL
Burn13=NULL
Burn14=NULL
Burn15=NULL
[Pull]
PullWith=Melee
MaxRadius=350
MaxZRange=50
PullWait=0
PullRoleToggle=0
ChainPull=0
ChainPullHP=90
ChainPullPause=30|2
[AFKTools]
AFKHelp=AFKGMAction=0 Off, 1 Pause Macro, 2 End Macro, 3 Unload MQ2, 4 Quit Game
AFKToolsOn=0
AFKGMAction=1
AFKPCRadius=150
CampOnDeath=0
ClickBacktoCamp=0
[Merc]
Help=To use: Turn off Auto Assist in Manage Mercenary Window
MercOn=0
MercAssistAt=92
[SpellSet]
LoadSpellSet=0
SpellSetName=KissAssist
|ScoutingAhead All Tanks v2.0
#turbo 40
#include spell_routines.inc
#include wait4rez.inc
#event ToonReady "<#1> Ready"
#event UpdateEvent "#*#Your task '#1#' has been updated."
#event LootingEvent "#*# has looted a #1#.-#*#"
| Run /mac scoutingahead on your tank. Make sure you setup the INI right or it will not work.
| This macro is untested with mercs, but it should still work with them.
| There is a 75s delay at the start of every heroic for rebuffs defined in your ini.
| If you use campfire make sure you have 3 people in your FS in the group otherwise you will get spammed trying to create a campfire.
| This macro does not need autofollow
| Everyone should loot except MT if possible otherwise some items may not get picked up.
Sub Main
/declare DummyVariable int 1
/declare iii int inner
/echo Scouting Ahead All Tanks v2.0
/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 1547 395
/popup Scouting Ahead All Tanks v2.0
/call SetupCamp
/if (${Me.XTarget}==0) /varset bufftimer2 75s
/bcg //chase 1
/bcg //doleashtoon 1
/bcg //varset LootOn 1
/bcg //varset DoLoot 1
:mainloop
/if (${bufftimer2}) /call Checkselfbuff
/if (${bufftimer2}) /goto :mainloop
/if (!${bufftimer2}) {
:killmob
/for iii 1 to 5
/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 4 240 0 4
}
}
/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 SetUp
/declare kk int inner
/declare i int inner
/declare k int inner
/alert clear 1
/alert add 1 Gribble
/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
/bcg //end
/delay 2s
/bcga //tar Gribble
/delay 5s
/delay 20s ${SpawnCount[PC]}==${SpawnCount[PC radius 40]}
/keypress H
/delay 10s
/kickplayers task
/delay 5s ${Window[ConfirmationDialogBox].Open}
/nomodkey /notify ConfirmationDialogBox Yes_Button leftmouseup
/bcga //taskquit
/delay 10s
/bcga //say back
/delay 120s ${Zone.ShortName.Equal[deadhills]}
/delay 30s
/varset CampNum 1
/varset ReturnGribble 0
/mac disrupt
/return
Sub GetInstance
/bcga //plugin mq2navigation
/delay 10s
/bcga //tar Gribble
/delay 1
/bcga //navigate target
/delay 10s
/bcga //sit
/delay 10
/if (${Target.Distance}<50) {
/say willing
/delay 4s
/notify TaskSelectWnd TSEL_TaskList listselect ${Window[TaskSelectWnd].Child[TSEL_TaskList].List[=Scouting Ahead]}
/delay 4s
/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 SetupCamp
/varset Macro1 ${${Group.Member[1].Class.ShortName}}
/varset Macro2 ${${Group.Member[2].Class.ShortName}}
/varset Macro3 ${${Group.Member[3].Class.ShortName}}
/varset Macro4 ${${Group.Member[4].Class.ShortName}}
/varset Macro5 ${${Group.Member[5].Class.ShortName}}
|----------------
|
| 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
/bcg //target ${MainAssist}
/delay 2s
/bct ${Eales} //mac ${Macro1}
/bct ${Smst} //mac ${Macro2}
/bct ${Toon3} //mac ${Macro3}
/bct ${Toon4} //mac ${Macro4}
/bct ${Msae} //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 iiii int inner 0
/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}) {
/goto :Movepause
}
/bc [+Y+]Path : [+y+]${CampNum}[+Y+] Point : [+y+]${i} [+x+]
/squelch /moveto loc ${Path[${CampNum},${i},1]} ${Path[${CampNum},${i},2]}
/delay 3s
/if (${SpawnCount[PC]}>${SpawnCount[PC radius 40]}) /call AnyoneLost
:MoveLoop1
/for iiii 1 to ${Group}
/if (${Group.Member[${iiii}].Class.ShortName.Equal[BRD]}) {
/varset bd 1
/varset bdname ${Group.Member[${iiii}].CleanName}
}
/if (${Group.Member[${iiii}].Class.ShortName.Equal[SHM]}) {
/varset sh 1
/varset shname ${Group.Member[${iiii}].CleanName}
}
/next iiii
| This is here incase it tries to pull another mob when it already pulled one.
/if (${Me.XTarget}) {
/goto :Movepause
}
/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) {
/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 (${Target.LineOfSight} && ${Target.Distance}<230) {
/face fast
/delay 5
/if (${Me.XTarget}) /goto :Movepause
/if (${Me.Class.ShortName.Equal[SHD]} && !${Me.SpellReady[${PullSpell1}]} && !${Me.SpellReady[${PullSpell2}]} && ${Me.SpellReady[${PullSpell3}]}) {
/bc Casting ${PullSpell3} [+t+]${Target.Name}
/cast "${PullSpell3}"
}
/if (${Me.Class.ShortName.Equal[SHD]} && !${Me.SpellReady[${PullSpell1}]} && ${Me.SpellReady[${PullSpell2}]}) {
/bc Casting ${PullSpell2} [+t+]${Target.Name}
/cast "${PullSpell2}"
}
/if (${Me.Class.ShortName.Equal[SHD]} && ${Me.SpellReady[${PullSpell1}]}) {
/bc Casting ${PullSpell1} [+t+]${Target.Name}
/cast "${PullSpell1}"
}
/if (!${Me.Moving} && ${Me.Class.ShortName.Equal[PAL]} && !${Me.SpellReady[${PullSpell1}]} && !${Me.SpellReady[${PullSpell2}]} && ${Me.SpellReady[${PullSpell3}]}) {
/bc Casting ${PullSpell3} [+t+]${Target.Name}
/cast "${PullSpell3}"
}
/if (!${Me.Moving} && ${Me.Class.ShortName.Equal[PAL]} && !${Me.SpellReady[${PullSpell1}]} && ${Me.SpellReady[${PullSpell2}]}) {
/bc Casting ${PullSpell2} [+t+]${Target.Name}
/cast "${PullSpell2}"
}
/if (!${Me.Moving} && ${Me.Class.ShortName.Equal[PAL]} && ${Me.SpellReady[${PullSpell1}]}) {
/bc Casting ${PullSpell1} [+t+]${Target.Name}
/cast "${PullSpell1}"
}
/if (${Me.Class.ShortName.Equal[WAR]} && !${Me.XTarget}) {
/bc Shooting an arrow at [+t+]${Target.Name}
/ranged
/delay 2s
}
/delay 2s
}
/delay 4
}
| This is here incase it tries to pull another mob when it already pulled one.
/if (${Me.XTarget}) {
/goto :Movepause
}
/if (${Target.Type.Equal[NPC]} && ${Target.Distance}<150 && ${Target.LineOfSight} && ${Me.XTarget}<2) {
/delay 2s ${Me.CombatState.Equal[COMBAT]}
}
/next tt
}
}
/delay 1
/if (!${MoveTo.Stopped} && !${Me.XTarget}) /goto :MoveLoop1
| This is here so you use rest while pulling it helps a ton.
/if (!${Melee.DiscID} && ${Me.PctEndurance}<=18 && ${Me.CombatAbilityReady[${RespiteDisc}]}) /disc ${RespiteDisc}
| This is here incase it tries to pull another mob when it already pulled one.
/if (${Me.XTarget}) /goto :Movepause
| 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) {
/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}<230) {
/face fast
/delay 5
/if (${Me.XTarget}) {
/goto :Movepause
}
/if (${Me.Class.ShortName.Equal[SHD]} && !${Me.SpellReady[${PullSpell1}]} && !${Me.SpellReady[${PullSpell2}]} && ${Me.SpellReady[${PullSpell3}]}) {
/bc Casting ${PullSpell3} [+t+]${Target.Name}
/cast "${PullSpell3}"
}
/if (${Me.Class.ShortName.Equal[SHD]} && !${Me.SpellReady[${PullSpell1}]} && ${Me.SpellReady[${PullSpell2}]}) {
/bc Casting ${PullSpell2} [+t+]${Target.Name}
/cast "${PullSpell2}"
}
/if (${Me.Class.ShortName.Equal[SHD]} && ${Me.SpellReady[${PullSpell1}]}) {
/bc Casting ${PullSpell1} [+t+]${Target.Name}
/cast "${PullSpell1}"
}
/if (${Me.Class.ShortName.Equal[PAL]} && !${Me.SpellReady[${PullSpell1}]} && !${Me.SpellReady[${PullSpell2}]} && ${Me.SpellReady[${PullSpell3}]}) {
/bc Casting ${PullSpell3} [+t+]${Target.Name}
/cast "${PullSpell3}"
}
/if (${Me.Class.ShortName.Equal[PAL]} && !${Me.SpellReady[${PullSpell1}]} && ${Me.SpellReady[${PullSpell2}]}) {
/bc Casting ${PullSpell2} [+t+]${Target.Name}
/cast "${PullSpell2}"
}
/if (${Me.Class.ShortName.Equal[PAL]} && ${Me.SpellReady[${PullSpell1}]}) {
/bc Casting ${PullSpell1} [+t+]${Target.Name}
/cast "${PullSpell1}"
}
/if (${Me.Class.ShortName.Equal[WAR]} && !${Me.XTarget}) {
/bc Shooting an arrow at [+t+]${Target.Name}
/ranged
/delay 2s
}
/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}) {
/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) {
/delay 1s
/bcg //end
/delay 2s
/if (${bd}) /bct ${bdname} //casting "Selo's Sonata"
/if (${sh}) /bct ${shname} //casting "Communion of the Cheetah"
/bcga //hidecorpse all
/delay 5
/bcga //hidecorpse looted
/bcg //stopcast
/delay 5
/bcg //target ${MainAssist}
/delay 2s
/bcg //stick 15
/delay 1s
/bcg //stopcast
/bcg //twist off
/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 1s
/if (${Me.XTarget}==0) {
/call DoIMed
/delay 4s
/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 Event_LootingEvent(Line1, ItemName)
/varset ItemName ${ItemName.Right[-57]}
/varset ItemName ${ItemName.Left[-1]}
/bc Item = ${ItemName}
/if (${ItemName.Find[Excavation Tools]} || ${ItemName.Find[Dynamite]} || ${ItemName.Find[Xulous Spellbook]}) {
/bc Click item found = ${ItemName}
/delay 2s
/delay 6s ${Me.CombatState.Equal[COMBAT]}
/bct ${LooterName} //useitem "${ItemName}"
/delay 1s
/bcga //useitem "${ItemName}"
/varset OuterItem ${ItemName}
/varset ReturnGribble 1
/delay 2s
}
/if (${ReturnGribble}==1 && ${Me.XTarget}==0) {
/delay 2s
/bcg //end
/delay 2s
/bcg //target ${MainAssist}
/delay 2s
/bcg //stick 15
/delay 3s
/keypress esc
}
/return
Sub GetTarget
/declare asd int inner
/declare tempID int local ${Target.ID}
/if (${Me.Moving}) /return
/for asd 1 to 10
/if (!${validTarget} && ${Target.ID}==${Me.XTarget[${asd}].ID}) {
/varset validTarget 1
/varset CurrentTarget ${Target.ID}
/next asd
} else {
/xtar 1
/varset validTarget 1
/varset CurrentTarget ${Target.ID}
}
/if (!${validTarget} && ${Me.XTarget}>=1) /xtar 1
/if (!${Target.ID} && ${Me.XTarget}>=1) /xtar 1
/if (${Target.Type.Equal["Corpse"]}) /target clear
/if (${Target.Name.Equal[${MainAssist}]}) /target clear
/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
/call Attack
/if (${SpawnCount[npc radius 75 zradius 100]}>=3) /call Defensive
/if (${Target.Named}) /call Defensive
/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} && ${Target.Distance} <= 35) /attack on
/call CheckHealth
/if (${Me.Class.ShortName.Equal[WAR]}) /call Aggro_WAR
/if (${Me.Class.ShortName.Equal[SHD]}) /call Aggro_SK
/if (${Me.Class.ShortName.Equal[PAL]}) /call Aggro_PAL
/if (${SpawnCount[npc radius 75 zradius 100]}>=3) /call Defensive
/if (${Target.Named}) /call Defensive
/if (!${Stick.Active}) /stick ${StickSetting}
/return
Sub Nuke
/if (${Me.Class.ShortName.Equal[WAR]}) /return
/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"
/if (${Me.AltAbilityReady[Vicious Bite of Chaos]} && !${Me.Moving} && !${Target.Type.Equal["corpse"]}) /casting "Vicious Bite of Chaos"
/return
Sub CheckHealth
/declare ia int inner
/varset GroupHealth 0
/if (${Me.Class.ShortName.Equal[WAR]}) /return
/if (${Me.Dead}) /return
/if (${Me.Class.ShortName.Equal[SHD]}) {
/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"
}
/if (${Me.Class.ShortName.Equal[PAL]}) {
/if (${Me.PctMana}<80 && ${Me.AltAbilityReady[Marr's Gift]}) /casting "Marr's Gift"
/if (${Me.PctHPs}<75 && ${Me.PctMana}>25 && ${Me.SpellReady[${HateSpell1}]} && ${Target.ID}) /cast "${HateSpell1}"
/if (${Me.PctHPs}<70 && ${Me.PctMana}>25 && ${Me.SpellReady[${HealSpell1}]} && ${Target.ID}) /cast "${HealSpell1}"
/if (${Me.PctHPs}<50 && ${Me.PctMana}>25 && !${Me.SpellReady[${HealSpell1}]} && ${Me.SpellReady[${HealSpell2}]} && ${Target.ID}) /cast "${HealSpell2}"
/for ia 0 to ${Group.Members}
/if (${Group.Member[${ia}].PctHPs} < 65 && ${Me.SpellReady[${HealSpell3}]}) {
/target ${Group.Member[${ia}].PctHPs}
/delay 5
/cast "${HealSpell3}"
}
/if (${Group.Member[${ia}].ID}) {
/varcalc GroupHealth ${GroupHealth}+${Group.Member[${ia}].PctHPs}
} else {
/varcalc GroupHealth ${GroupHealth} + 100
}
/next ia
/if (${Me.SpellReady[${HealSpell2}]} && ${Math.Calc[${GroupHealth}/${Group.GroupSize}+1]}<${GHealGroupHealth}) {
/cast "${HealSpell2}"
}
}
/return
Sub Aggro_SK
/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.AbilityReady[Taunt]}) /doability Taunt
/if (${Target.Distance}<35 && ${Me.Casting.Name.Equal[NULL]} && ${Me.AbilityReady[Bash]}) /doability Bash
/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.XTarget}>=2 && ${Me.AltAbilityReady[Improved Explosion of spite]}) /casting "Improved Explosion of spite"
/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}"
/if (${Me.XTarget}>=2 && ${Me.AltAbilityReady[Improved Explosion of spite]}) /casting "Improved Explosion of spite"
/if (${Me.XTarget}>=3 && ${Me.AltAbilityReady[Improved Explosion of hatred]}) /casting "Improved Explosion of hatred"
/if (${Me.XTarget}>=3 && ${Me.SpellReady[${AeHateSpell1}]}) /cast "${AeHateSpell1}"
/if (${Me.XTarget}>=4 && ${Me.SpellReady[${AeHateSpell2}]}) /cast "${AeHateSpell2}"
/if (${Me.XTarget}>=6 && ${Me.SpellReady[${AeHateSpell3}]}) /cast "${AeHateSpell3}"
/call CheckHealth
/call Offensive
/call Nuke
/return
Sub Aggro_PAL
/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.AbilityReady[Taunt]}) /doability Taunt
/if (${Target.Distance}<35 && ${Me.Casting.Name.Equal[NULL]} && ${Me.AbilityReady[Bash]}) /doability Bash
/if (${Target.PctHPs}<98 && ${Me.AltAbilityReady[Divine Stun]} && ${Melee.AggroMode}) /casting "Divine Stun"
/if (${Target.PctHPs}<98 && ${Me.SpellReady[${StunSpell1}]} && ${Melee.AggroMode}) /cast "${StunSpell1}"
/if (${Me.XTarget}<2 && ${Me.SpellReady[${ChallengeSpell}]}) /call once ChallengeSpell
/if (${Me.Combat} && ${Me.SpellReady[${HateSpell1}]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /cast "${HateSpell1}"
/if (${Me.XTarget}>=3 && ${Me.SpellReady[${HealSpell2}]} && !${Me.AltAbilityReady[Beacon of the Righteous]}) /call Once "${HealSpell2}"
/if (${Me.XTarget}>=3 && ${Me.AltAbilityReady[Beacon of the Righteous]}) /casting "Beacon of the Righteous"
/call CheckHealth
/call Offensive
/call Nuke
/return
Sub Aggro_WAR
/declare MobID int local
/declare i int local
/declare mobcount int local
/declare Mobs int local
/if (${Me.Dead}) /return
/call Defensive
/if (!${Me.Combat} && ${Target.Distance} <= 35) /attack on
/if (${Me.Combat} && ${Target.PctHPs}<98 && !${Me.Buff[Sneering Grin].ID} && ${Me.AltAbilityReady[Sneering Grin]} && ${Melee.AggroMode}) /casting "Sneering Grin"
/if (${Me.Combat} && ${Me.CombatAbilityReady[${StormwheelBlades}]} && ${Melee.AggroMode} && ${Me.XTarget}>=2) /disc ${StormwheelBlades}
/if (${Target.Distance}<35 && ${Me.Casting.Name.Equal[NULL]} && ${Me.PctAggro} < 100 && ${Me.AbilityReady[Taunt]}) /doability Taunt
/if (${Me.Combat} && ${Target.PctHPs}<=99 && ${Me.PctEndurance}>1 && ${Me.CombatAbilityReady[${Ridicule}]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /disc ${Ridicule}
/if (${Me.Combat} && ${Target.PctHPs}<=99 && ${Me.AltAbilityReady[Blast of Anger]} && !${Me.CombatAbilityReady[${KrondalRoar}]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /casting "Blast of Anger"
/if (${Me.Combat} && ${Target.PctHPs}<=99 && !${Me.AltAbilityReady[Blast of Anger]} && ${Me.AltAbilityReady[Rage of the Forsaken]} && !${Me.CombatAbilityReady[${KrondalRoar}]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /casting "Rage of the Forsaken"
/if (${Me.Combat} && ${Target.PctHPs}<=99 && ${Me.CombatAbilityReady[${HarassingShout}]} && !${Me.AltAbilityReady[Blast of Anger]} && ${Me.AltAbilityReady[Rage of the Forsaken]} && !${Me.CombatAbilityReady[Krondal's Roar]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /disc ${HarassingShout}
/if (${Me.Combat} && ${Target.PctHPs}<=99 && ${Me.CombatAbilityReady[${PhantomAggressor}]} && !${Me.CombatAbilityReady[${HarassingShout}]} && !${Me.AltAbilityReady[Blast of Anger]} && ${Me.AltAbilityReady[Rage of the Forsaken]} && !${Me.CombatAbilityReady[${KrondalRoar}]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /disc ${PhantomAggressor}
/if (${Me.Combat} && ${Me.AltAbilityReady[Area Taunt]} && ${Melee.AggroMode} && ${Me.XTarget}>=4) /casting "Area Taunt"
/if (${Me.Combat} && !${Me.CombatAbilityReady[${StormwheelBlades}]} && ${Target.PctHPs}<=99 && ${Me.PctEndurance}>1 && ${Me.CombatAbilityReady[${RoarofChallenge}]} && ${Melee.AggroMode} && ${Me.XTarget}>=3) /disc ${RoarofChallenge}
/if (${Me.Combat} && ${Me.AltAbilityReady[Warlord's Tenacity]} && ${Target.PctHPs}<=99 && ${Melee.AggroMode} && ${Me.XTarget}>=4) /casting "Warlord's Tenacity"
/if (${Me.Combat} && ${Me.AltAbilityReady[Warlord's Tenacity]} && ${Target.PctHPs}<=99 && ${Melee.AggroMode} && ${Target.Named}) /casting "Warlord's Tenacity"
/if (${Me.Combat} && !${Me.Song[Imperator's Command].ID} && ${Me.AltAbilityReady[Imperator's Command]} && ${Target.PctHPs}<=99 && ${Melee.AggroMode} && ${Me.XTarget}>=3) /casting "Imperator's Command"
/if (${Me.Combat} && !${Me.Song[Imperator's Command].ID} && ${Me.AltAbilityReady[Imperator's Command]} && ${Target.PctHPs}<=99 && ${Melee.AggroMode} && ${Target.Named}) /casting "Imperator's Command"
/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 (${Me.Class.ShortName.Equal[WAR]} && ${Me.Combat} && ${Me.CombatAbilityReady[Fortitude Discipline]} && ${Melee.AggroMode} && ${Me.XTarget}>=5) {
/stopdisc
/delay 4
/disc Fortitude Discipline
}
/if (${Me.Class.ShortName.Equal[SHD]} && ${Me.Combat} && ${Me.CombatAbilityReady[Deflection Discipline]} && ${Melee.AggroMode} && ${Me.XTarget}>=5) {
/stopdisc
/delay 4
/disc Deflection Discipline
}
/if (${Me.Class.ShortName.Equal[PAL]} && ${Me.Combat} && ${Me.CombatAbilityReady[Deflection Discipline]} && ${Melee.AggroMode} && ${Me.XTarget}>=5) {
/stopdisc
/delay 4
/disc Deflection Discipline
}
/if (${Me.Class.ShortName.Equal[WAR]} && ${Me.Combat} && !${Me.CombatAbilityReady[${Defensive2}]} && !${Me.CombatAbilityReady[${Defensive1}]} && ${Target.PctHPs}<98 && !${Me.Buff[Brace for Impact].ID} && ${Me.AltAbilityReady[Brace for Impact]} && ${Melee.AggroMode} && ${Me.XTarget}>=3) /casting "Brace for Impact"
/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 Offensive
/if (${Me.Class.ShortName.Equal[WAR]}) /return
/if (${Me.Class.ShortName.Equal[PAL]}) /return
/if (${Me.AltAbilityReady[Harm Touch]} && ${Target.Named} && !${Target.Type.Equal["corpse"]}) /casting "Harm Touch"
/if (${Me.AltAbilityReady[Visage of Death]} && ${Target.Named} && !${Target.Type.Equal["corpse"]}) /casting "Visage of Death"
/if (${Me.CombatAbilityReady[${ScarletBlade}]} && ${Target.Named} && !${Target.Type.Equal["corpse"]}) /disc ${ScarletBlade}
/if (${Me.AltAbilityReady[Visage of Death]} && ${Me.XTarget}>=4 && !${Target.Type.Equal["corpse"]}) /casting "Visage of Death"
/if (${Me.CombatAbilityReady[${ScarletBlade}]} && ${Me.XTarget}>=4 && !${Target.Type.Equal["corpse"]}) /disc ${ScarletBlade}
/return
Sub GeneralDeclares
/if (${Me.Class.ShortName.Equal[SHD]}) /declare iniName string outer DH_SK_${Me.Name}.ini
/if (${Me.Class.ShortName.Equal[WAR]}) /declare iniName string outer DH_WAR_${Me.Name}.ini
/if (${Me.Class.ShortName.Equal[PAL]}) /declare iniName string outer DH_PAL_${Me.Name}.ini
/declare IniPathFile string outer scouting.ini
/declare Path[5,26,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 LastHealSpell2 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 bdname string outer
/declare bd int outer 0
/declare shname string outer
/declare sh int outer 0
/declare CombatList string outer ${HateSpell1},${HateSpell2},${HateSpell3},${AeHateSpell1},${AeHateSpell2},${AeHateSpell3},${AeHateSpell4},${NukeSpell1},${NukeSpell2},${ChallengeSpell}|
/declare AeList string outer ${AeHateSpell1},${AeHateSpell2},${AeHateSpell3},${AeHateSpell4}
/declare Toon1 string outer ${Group.Member[1].Name}
/declare Toon2 string outer ${Group.Member[2].Name}
/declare Toon3 string outer ${Group.Member[3].Name}
/declare Toon4 string outer ${Group.Member[4].Name}
/declare LooterName string outer ${Group.Member[5].Name}
/declare MainAssist string outer ${Me.Name}
/declare GHealGroupHealth int outer 65
/declare GroupHealth int outer 0
/call DeclareIniVar BRD string Class kissassist
/call DeclareIniVar BST string Class kissassist
/call DeclareIniVar BER string Class kissassist
/call DeclareIniVar CLR string Class kissassist
/call DeclareIniVar DRU string Class kissassist
/call DeclareIniVar ENC string Class kissassist
/call DeclareIniVar MAG string Class kissassist
/call DeclareIniVar MNK string Class kissassist
/call DeclareIniVar NEC string Class kissassist
/call DeclareIniVar PAL string Class kissassist
/call DeclareIniVar RNG string Class kissassist
/call DeclareIniVar ROG string Class kissassist
/call DeclareIniVar SHD string Class kissassist
/call DeclareIniVar SHM string Class kissassist
/call DeclareIniVar WAR string Class kissassist
/call DeclareIniVar WIZ string Class afnuke
/call DeclareIniVar Aggro int Settings 0 /doaggro
/call DeclareIniVar UseCampfire int Settings 0
/if (${Me.Class.ShortName.Equal[WAR]}) {
/call DeclareIniVar SummonItem string Settings "Huntsman's Ethereal Quiver"
/call DeclareIniVar Ammo string Settings "Ethereal Arrow"
/call DeclareIniVar Defensive1 string Disc "Last Stand Discipline Rk. II"
/call DeclareIniVar Defensive2 string Disc "No Time to Bleed"
/call DeclareIniVar Defensive3 string Disc "Steadfast Defense"
/call DeclareIniVar PullSpell1 string Disc "Krondal's Roar"
/call DeclareIniVar PullSpell2 string Disc "Ridicule"
/call DeclareIniVar PullSpell3 string Disc "Ridicule"
/call DeclareIniVar HarassingShout string Aggro "Harassing Shout"
/call DeclareIniVar PhantomAggressor string Aggro "Phantom Aggressor"
/call DeclareIniVar StormwheelBlades string Aggro "Stormwheel Blades"
/call DeclareIniVar Ridicule string Aggro "Ridicule"
/call DeclareIniVar KrondalRoar string Aggro "Krondal's Roar"
/call DeclareIniVar RoarofChallenge string Aggro "Roar of Challenge"
/call DeclareIniVar BuffGem string Spells "12"
}
/if (${Me.Class.ShortName.Equal[PAL]}) {
/call DeclareIniVar Defensive1 string Disc "Reverent Penitence"
/call DeclareIniVar Defensive2 string Disc "Brightwing Mantle"
/call DeclareIniVar Defensive3 string Disc "Holy Guardian Discipline"
/call DeclareIniVar HateSpell1 string Spells "Valiant Deflection"
/call DeclareIniVar PullSpell1 string Spells "Demand for Honor"
/call DeclareIniVar PullSpell2 string Spells "Force of Reverence"
/call DeclareIniVar PullSpell3 string Spells "Force of the Iceclad"
/call DeclareIniVar StunSpell1 string Spells "Force of Reverence"
/call DeclareIniVar StunSpell2 string Spells "Force of the Iceclad"
/call DeclareIniVar StunSpell3 string Spells "Reverent Force"
/call DeclareIniVar StunSpell4 string Spells "Lesson of Sorrow"
/call DeclareIniVar ChallengeSpell string Spells "Demand for Honor"
/call DeclareIniVar HealSpell1 string Spells "Sorrow"
/call DeclareIniVar HealSpell2 string Spells "Aurora of Sunrise"
/call DeclareIniVar HealSpell3 string Spells "Burst of Sunrise"
/call DeclareIniVar GHealSpell1 string Spells "Wave of Sorrow"
/call DeclareIniVar BuffGem string Spells "12"
}
/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
/if (${Me.Class.ShortName.Equal[SHD]}) {
/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 ScarletBlade string Disc "Scarlet Blade"
/call DeclareIniVar PullSpell1 string Spells "Terror of Vergalid"
/call DeclareIniVar PullSpell2 string Spells "Terror of Vergalid"
/call DeclareIniVar PullSpell3 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"
/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
}
/declare Macro1 string outer ${${Group.Member[1].Class.ShortName}}
/declare Macro2 string outer ${${Group.Member[2].Class.ShortName}}
/declare Macro3 string outer ${${Group.Member[3].Class.ShortName}}
/declare Macro4 string outer ${${Group.Member[4].Class.ShortName}}
/declare Macro5 string outer ${${Group.Member[5].Class.ShortName}}
/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
/if (${Me.Class.ShortName.Equal[SHD]} && ${Me.AltAbilityReady[Voice of Thule]}) {
/target ${MainAssist}
/delay 5
/alt act 7000
}
/call CheckBuffies
/varset bufftimer 10s
/return
Sub MemSpell(SpellName,SpellGem)
/varset bufftimer 0
/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
/call Checkselfbuff
/return
Sub DoIMed
/if (${Me.PctEndurance}<=21) {
/sit
}
:keepmedding
/if (${Me.XTarget}<1 && ${Me.Sitting} && ${Me.PctEndurance}<=90) /goto :keepmedding
/return
|In case toons got stuck somewhere
Sub AnyoneLost
/bcg //multiline ; /target ${MainAssist} ;/navigate target
/delay 3s
/return
[General]
KissAssistVer=8.4.2
Role=Tank
CampRadius=25
CampRadiusExceed=150
ReturnToCamp=1
ChaseAssist=0
ChaseDistance=25
MedOn=1
MedStart=20
MedCombat=0
LootOn=0
RezAcceptOn=1
AcceptInvitesOn=1
EQBCOn=1
GroupWatchOn=1
IRCOn=0
MiscGem=8
HoTTOn=0
CampfireOn=0
[Melee]
AssistAt=100
MeleeOn=1
FaceMobOn=1
MeleeDistance=50
StickHow=front
AutoFireOn=0
[Buffs]
BuffsOn=1
Buffs1=Champion's Aura|Aura|Champion's Aura Effect
Buffs2=NULL
Buffs3=NULL
Buffs4=NULL
Buffs5=NULL
Buffs6=NULL
Buffs7=NULL
Buffs8=NULL
Buffs9=NULL
Buffs10=Familiar of the Jungle
Buffs11=NULL
Buffs12=NULL
Buffs13=NULL
Buffs14=NULL
Buffs15=NULL
Buffs16=NULL
Buffs17=NULL
Buffs18=NULL
Buffs19=NULL
Buffs20=NULL
RebuffOn=1
CheckBuffsTimer=20
[DPS]
DPSOn=1
DPSSkip=0
DPSInterval=2
DPS1=Jeer|99
DPS2=Bracing Defense|95
DPS3=Knuckle Crush|90
DPS4=Disarm|85
DPS5=Field Armorer|80
DPS6=Shield Topple|75
DPS7=Bazu Bluster|50
DPS8=Opportunistic Strike|19
DPS9=NULL
DPS10=NULL
DPS11=NULL
DPS12=NULL
DPS13=NULL
DPS14=NULL
DPS15=NULL
[Heals]
Help=Format Spell|% to heal at i.e. Devout Light Rk. II|50
HealsOn=1
Heals1=Furious Discipline|30|Me
Heals2=NULL
Heals3=NULL
Heals4=NULL
Heals5=NULL
Heals6=NULL
Heals7=NULL
Heals8=NULL
AutoRezOn=0
AutoRezWith=Your Rez Item/AA/Spell
XTarHeal=0
[Merc]
Help=To use: Turn off Auto Assist in Manage Mercenary Window
MercOn=1
MercAssistAt=96
[Pull]
PullWith=Bazu Roar
MaxRadius=375
MaxZRange=150
LoSFailOn=0
PullWait=5
PullRoleToggle=0
ChainPull=0
ChainPullHP=90
ChainPullPause=30|2
[AFKTools]
AFKToolsOn=1
AFKGMAction=/quit
AFKPCRadius=150
AFKHelp=AFKGMAction=0 Off, 1 Pause Macro, 2 End Macro, 3 Unload MQ2, 4 Quit Game
CampOnDeath=0
ClickBacktoCamp=0
[Burn]
BurnText=Decepticons Attack
Burn1=Heroic Ironhand Breastplate
Burn2=Fourth Wind
Burn3=Stonewall Discipline
Burn4=Armor of Timeworn Runes
Burn5=Brutal Onslaught Discipline
Burn6=Punch Through
BurnAllNamed=1
Burn7=NULL
Burn8=NULL
Burn9=NULL
Burn10=NULL
Burn11=NULL
Burn12=NULL
Burn13=NULL
Burn14=NULL
Burn15=NULL
[SpellSet]
LoadSpellSet=0
SpellSetName=KissAssist
[AE]
AEOn=0
AERadius=50
AE1=NULL
AE2=NULL
AE3=NULL
AE4=NULL
AE5=NULL
[Aggro]
AggroOn=0
Aggro1=NULL
Aggro2=NULL
Aggro3=NULL
[Cures]
CuresOn=0
Cures1=NULL
Cures2=NULL
Cures3=NULL
Cures4=NULL
Cures5=NULL
DoLoot and LootOn are sent to the clients after they load up KissAssist so it's an issue with the variables within KissAssist I think. Those variables might have been deleted and replaced with something else so the macro won't work until it's updated.
|ScoutingAhead All Tanks v2.0
#turbo 40
#include spell_routines.inc
#include wait4rez.inc
#event ToonReady "<#1> Ready"
#event UpdateEvent "#*#Your task '#1#' has been updated."
#event LootingEvent "#*# has looted a #1#.-#*#"
| Run /mac scoutingahead on your tank. Make sure you setup the INI right or it will not work.
| This macro is untested with mercs, but it should still work with them.
| There is a 75s delay at the start of every heroic for rebuffs defined in your ini.
| If you use campfire make sure you have 3 people in your FS in the group otherwise you will get spammed trying to create a campfire.
| This macro does not need autofollow
| Everyone should loot except MT if possible otherwise some items may not get picked up.
Sub Main
/declare DummyVariable int 1
/declare iii int inner
/echo Scouting Ahead All Tanks v2.0
/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 1547 395
/popup Scouting Ahead All Tanks v2.0
/call SetupCamp
/if (${Me.XTarget}==0) /varset bufftimer2 75s
/bcg //chase 1
/bcg //doleashtoon 1
/bcg //varset LootOn 1
/bcg //varset DoLoot 1
:mainloop
/if (${bufftimer2}) /call Checkselfbuff
/if (${bufftimer2}) /goto :mainloop
/if (!${bufftimer2}) {
:killmob
/for iii 1 to 5
/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 4 240 0 4
}
}
/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 SetUp
/declare kk int inner
/declare i int inner
/declare k int inner
/alert clear 1
/alert add 1 Gribble
/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
/bcg //end
/delay 2s
/bcga //tar Gribble
/delay 5s
/delay 20s ${SpawnCount[PC]}==${SpawnCount[PC radius 40]}
/keypress H
/delay 10s
/kickplayers task
/delay 5s ${Window[ConfirmationDialogBox].Open}
/nomodkey /notify ConfirmationDialogBox Yes_Button leftmouseup
/bcga //taskquit
/delay 10s
/bcga //say back
/delay 120s ${Zone.ShortName.Equal[deadhills]}
/delay 30s
/varset CampNum 1
/varset ReturnGribble 0
/mac disrupt
/return
Sub GetInstance
/bcga //plugin mq2navigation
/delay 10s
/bcga //tar Gribble
/delay 1
/bcga //navigate target
/delay 10s
/bcga //sit
/delay 10
/if (${Target.Distance}<50) {
/say willing
/delay 4s
/notify TaskSelectWnd TSEL_TaskList listselect ${Window[TaskSelectWnd].Child[TSEL_TaskList].List[=Scouting Ahead]}
/delay 4s
/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 SetupCamp
/varset Macro1 ${${Group.Member[1].Class.ShortName}}
/varset Macro2 ${${Group.Member[2].Class.ShortName}}
/varset Macro3 ${${Group.Member[3].Class.ShortName}}
/varset Macro4 ${${Group.Member[4].Class.ShortName}}
/varset Macro5 ${${Group.Member[5].Class.ShortName}}
|----------------
|
| 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
/bcg //target ${MainAssist}
/delay 2s
/bct ${Earldibbles} //mac ${Macro1}
/bct ${Smokenfist} //mac ${Macro2}
/bct ${Toon3} //mac ${Macro3}
/bct ${Toon4} //mac ${Macro4}
/bct ${Mossaxe} //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 iiii int inner 0
/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}) {
/goto :Movepause
}
/bc [+Y+]Path : [+y+]${CampNum}[+Y+] Point : [+y+]${i} [+x+]
/squelch /moveto loc ${Path[${CampNum},${i},1]} ${Path[${CampNum},${i},2]}
/delay 3s
/if (${SpawnCount[PC]}>${SpawnCount[PC radius 40]}) /call AnyoneLost
:MoveLoop1
/for iiii 1 to ${Group}
/if (${Group.Member[${iiii}].Class.ShortName.Equal[BRD]}) {
/varset bd 1
/varset bdname ${Group.Member[${iiii}].CleanName}
}
/if (${Group.Member[${iiii}].Class.ShortName.Equal[SHM]}) {
/varset sh 1
/varset shname ${Group.Member[${iiii}].CleanName}
}
/next iiii
| This is here incase it tries to pull another mob when it already pulled one.
/if (${Me.XTarget}) {
/goto :Movepause
}
/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) {
/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 (${Target.LineOfSight} && ${Target.Distance}<230) {
/face fast
/delay 5
/if (${Me.XTarget}) /goto :Movepause
/if (${Me.Class.ShortName.Equal[SHD]} && !${Me.SpellReady[${PullSpell1}]} && !${Me.SpellReady[${PullSpell2}]} && ${Me.SpellReady[${PullSpell3}]}) {
/bc Casting ${PullSpell3} [+t+]${Target.Name}
/cast "${PullSpell3}"
}
/if (${Me.Class.ShortName.Equal[SHD]} && !${Me.SpellReady[${PullSpell1}]} && ${Me.SpellReady[${PullSpell2}]}) {
/bc Casting ${PullSpell2} [+t+]${Target.Name}
/cast "${PullSpell2}"
}
/if (${Me.Class.ShortName.Equal[SHD]} && ${Me.SpellReady[${PullSpell1}]}) {
/bc Casting ${PullSpell1} [+t+]${Target.Name}
/cast "${PullSpell1}"
}
/if (!${Me.Moving} && ${Me.Class.ShortName.Equal[PAL]} && !${Me.SpellReady[${PullSpell1}]} && !${Me.SpellReady[${PullSpell2}]} && ${Me.SpellReady[${PullSpell3}]}) {
/bc Casting ${PullSpell3} [+t+]${Target.Name}
/cast "${PullSpell3}"
}
/if (!${Me.Moving} && ${Me.Class.ShortName.Equal[PAL]} && !${Me.SpellReady[${PullSpell1}]} && ${Me.SpellReady[${PullSpell2}]}) {
/bc Casting ${PullSpell2} [+t+]${Target.Name}
/cast "${PullSpell2}"
}
/if (!${Me.Moving} && ${Me.Class.ShortName.Equal[PAL]} && ${Me.SpellReady[${PullSpell1}]}) {
/bc Casting ${PullSpell1} [+t+]${Target.Name}
/cast "${PullSpell1}"
}
/if (${Me.Class.ShortName.Equal[WAR]} && !${Me.XTarget}) {
/bc Shooting an arrow at [+t+]${Target.Name}
/ranged
/delay 2s
}
/delay 2s
}
/delay 4
}
| This is here incase it tries to pull another mob when it already pulled one.
/if (${Me.XTarget}) {
/goto :Movepause
}
/if (${Target.Type.Equal[NPC]} && ${Target.Distance}<150 && ${Target.LineOfSight} && ${Me.XTarget}<2) {
/delay 2s ${Me.CombatState.Equal[COMBAT]}
}
/next tt
}
}
/delay 1
/if (!${MoveTo.Stopped} && !${Me.XTarget}) /goto :MoveLoop1
| This is here so you use rest while pulling it helps a ton.
/if (!${Melee.DiscID} && ${Me.PctEndurance}<=18 && ${Me.CombatAbilityReady[${RespiteDisc}]}) /disc ${RespiteDisc}
| This is here incase it tries to pull another mob when it already pulled one.
/if (${Me.XTarget}) /goto :Movepause
| 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) {
/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}<230) {
/face fast
/delay 5
/if (${Me.XTarget}) {
/goto :Movepause
}
/if (${Me.Class.ShortName.Equal[SHD]} && !${Me.SpellReady[${PullSpell1}]} && !${Me.SpellReady[${PullSpell2}]} && ${Me.SpellReady[${PullSpell3}]}) {
/bc Casting ${PullSpell3} [+t+]${Target.Name}
/cast "${PullSpell3}"
}
/if (${Me.Class.ShortName.Equal[SHD]} && !${Me.SpellReady[${PullSpell1}]} && ${Me.SpellReady[${PullSpell2}]}) {
/bc Casting ${PullSpell2} [+t+]${Target.Name}
/cast "${PullSpell2}"
}
/if (${Me.Class.ShortName.Equal[SHD]} && ${Me.SpellReady[${PullSpell1}]}) {
/bc Casting ${PullSpell1} [+t+]${Target.Name}
/cast "${PullSpell1}"
}
/if (${Me.Class.ShortName.Equal[PAL]} && !${Me.SpellReady[${PullSpell1}]} && !${Me.SpellReady[${PullSpell2}]} && ${Me.SpellReady[${PullSpell3}]}) {
/bc Casting ${PullSpell3} [+t+]${Target.Name}
/cast "${PullSpell3}"
}
/if (${Me.Class.ShortName.Equal[PAL]} && !${Me.SpellReady[${PullSpell1}]} && ${Me.SpellReady[${PullSpell2}]}) {
/bc Casting ${PullSpell2} [+t+]${Target.Name}
/cast "${PullSpell2}"
}
/if (${Me.Class.ShortName.Equal[PAL]} && ${Me.SpellReady[${PullSpell1}]}) {
/bc Casting ${PullSpell1} [+t+]${Target.Name}
/cast "${PullSpell1}"
}
/if (${Me.Class.ShortName.Equal[WAR]} && !${Me.XTarget}) {
/bc Shooting an arrow at [+t+]${Target.Name}
/ranged
/delay 2s
}
/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}) {
/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) {
/delay 1s
/bcg //end
/delay 2s
/if (${bd}) /bct ${bdname} //casting "Selo's Sonata"
/if (${sh}) /bct ${shname} //casting "Communion of the Cheetah"
/bcga //hidecorpse all
/delay 5
/bcga //hidecorpse looted
/bcg //stopcast
/delay 5
/bcg //target ${MainAssist}
/delay 2s
/bcg //stick 15
/delay 1s
/bcg //stopcast
/bcg //twist off
/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 1s
/if (${Me.XTarget}==0) {
/call DoIMed
/delay 4s
/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 Event_LootingEvent(Line1, ItemName)
/varset ItemName ${ItemName.Right[-57]}
/varset ItemName ${ItemName.Left[-1]}
/bc Item = ${ItemName}
/if (${ItemName.Find[Excavation Tools]} || ${ItemName.Find[Dynamite]} || ${ItemName.Find[Xulous Spellbook]}) {
/bc Click item found = ${ItemName}
/delay 2s
/delay 6s ${Me.CombatState.Equal[COMBAT]}
/bct ${LooterName} //useitem "${ItemName}"
/delay 1s
/bcga //useitem "${ItemName}"
/varset OuterItem ${ItemName}
/varset ReturnGribble 1
/delay 2s
}
/if (${ReturnGribble}==1 && ${Me.XTarget}==0) {
/delay 2s
/bcg //end
/delay 2s
/bcg //target ${MainAssist}
/delay 2s
/bcg //stick 15
/delay 3s
/keypress esc
}
/return
Sub GetTarget
/declare asd int inner
/declare tempID int local ${Target.ID}
/if (${Me.Moving}) /return
/for asd 1 to 10
/if (!${validTarget} && ${Target.ID}==${Me.XTarget[${asd}].ID}) {
/varset validTarget 1
/varset CurrentTarget ${Target.ID}
/next asd
} else {
/xtar 1
/varset validTarget 1
/varset CurrentTarget ${Target.ID}
}
/if (!${validTarget} && ${Me.XTarget}>=1) /xtar 1
/if (!${Target.ID} && ${Me.XTarget}>=1) /xtar 1
/if (${Target.Type.Equal["Corpse"]}) /target clear
/if (${Target.Name.Equal[${MainAssist}]}) /target clear
/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
/call Attack
/if (${SpawnCount[npc radius 75 zradius 100]}>=3) /call Defensive
/if (${Target.Named}) /call Defensive
/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} && ${Target.Distance} <= 35) /attack on
/call CheckHealth
/if (${Me.Class.ShortName.Equal[WAR]}) /call Aggro_WAR
/if (${Me.Class.ShortName.Equal[SHD]}) /call Aggro_SK
/if (${Me.Class.ShortName.Equal[PAL]}) /call Aggro_PAL
/if (${SpawnCount[npc radius 75 zradius 100]}>=3) /call Defensive
/if (${Target.Named}) /call Defensive
/if (!${Stick.Active}) /stick ${StickSetting}
/return
Sub Nuke
/if (${Me.Class.ShortName.Equal[WAR]}) /return
/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"
/if (${Me.AltAbilityReady[Vicious Bite of Chaos]} && !${Me.Moving} && !${Target.Type.Equal["corpse"]}) /casting "Vicious Bite of Chaos"
/return
Sub CheckHealth
/declare ia int inner
/varset GroupHealth 0
/if (${Me.Class.ShortName.Equal[WAR]}) /return
/if (${Me.Dead}) /return
/if (${Me.Class.ShortName.Equal[SHD]}) {
/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"
}
/if (${Me.Class.ShortName.Equal[PAL]}) {
/if (${Me.PctMana}<80 && ${Me.AltAbilityReady[Marr's Gift]}) /casting "Marr's Gift"
/if (${Me.PctHPs}<75 && ${Me.PctMana}>25 && ${Me.SpellReady[${HateSpell1}]} && ${Target.ID}) /cast "${HateSpell1}"
/if (${Me.PctHPs}<70 && ${Me.PctMana}>25 && ${Me.SpellReady[${HealSpell1}]} && ${Target.ID}) /cast "${HealSpell1}"
/if (${Me.PctHPs}<50 && ${Me.PctMana}>25 && !${Me.SpellReady[${HealSpell1}]} && ${Me.SpellReady[${HealSpell2}]} && ${Target.ID}) /cast "${HealSpell2}"
/for ia 0 to ${Group.Members}
/if (${Group.Member[${ia}].PctHPs} < 65 && ${Me.SpellReady[${HealSpell3}]}) {
/target ${Group.Member[${ia}].PctHPs}
/delay 5
/cast "${HealSpell3}"
}
/if (${Group.Member[${ia}].ID}) {
/varcalc GroupHealth ${GroupHealth}+${Group.Member[${ia}].PctHPs}
} else {
/varcalc GroupHealth ${GroupHealth} + 100
}
/next ia
/if (${Me.SpellReady[${HealSpell2}]} && ${Math.Calc[${GroupHealth}/${Group.GroupSize}+1]}<${GHealGroupHealth}) {
/cast "${HealSpell2}"
}
}
/return
Sub Aggro_SK
/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.AbilityReady[Taunt]}) /doability Taunt
/if (${Target.Distance}<35 && ${Me.Casting.Name.Equal[NULL]} && ${Me.AbilityReady[Bash]}) /doability Bash
/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.XTarget}>=2 && ${Me.AltAbilityReady[Improved Explosion of spite]}) /casting "Improved Explosion of spite"
/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}"
/if (${Me.XTarget}>=2 && ${Me.AltAbilityReady[Improved Explosion of spite]}) /casting "Improved Explosion of spite"
/if (${Me.XTarget}>=3 && ${Me.AltAbilityReady[Improved Explosion of hatred]}) /casting "Improved Explosion of hatred"
/if (${Me.XTarget}>=3 && ${Me.SpellReady[${AeHateSpell1}]}) /cast "${AeHateSpell1}"
/if (${Me.XTarget}>=4 && ${Me.SpellReady[${AeHateSpell2}]}) /cast "${AeHateSpell2}"
/if (${Me.XTarget}>=6 && ${Me.SpellReady[${AeHateSpell3}]}) /cast "${AeHateSpell3}"
/call CheckHealth
/call Offensive
/call Nuke
/return
Sub Aggro_PAL
/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.AbilityReady[Taunt]}) /doability Taunt
/if (${Target.Distance}<35 && ${Me.Casting.Name.Equal[NULL]} && ${Me.AbilityReady[Bash]}) /doability Bash
/if (${Target.PctHPs}<98 && ${Me.AltAbilityReady[Divine Stun]} && ${Melee.AggroMode}) /casting "Divine Stun"
/if (${Target.PctHPs}<98 && ${Me.SpellReady[${StunSpell1}]} && ${Melee.AggroMode}) /cast "${StunSpell1}"
/if (${Me.XTarget}<2 && ${Me.SpellReady[${ChallengeSpell}]}) /call once ChallengeSpell
/if (${Me.Combat} && ${Me.SpellReady[${HateSpell1}]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /cast "${HateSpell1}"
/if (${Me.XTarget}>=3 && ${Me.SpellReady[${HealSpell2}]} && !${Me.AltAbilityReady[Beacon of the Righteous]}) /call Once "${HealSpell2}"
/if (${Me.XTarget}>=3 && ${Me.AltAbilityReady[Beacon of the Righteous]}) /casting "Beacon of the Righteous"
/call CheckHealth
/call Offensive
/call Nuke
/return
Sub Aggro_WAR
/declare MobID int local
/declare i int local
/declare mobcount int local
/declare Mobs int local
/if (${Me.Dead}) /return
/call Defensive
/if (!${Me.Combat} && ${Target.Distance} <= 35) /attack on
/if (${Me.Combat} && ${Target.PctHPs}<98 && !${Me.Buff[Sneering Grin].ID} && ${Me.AltAbilityReady[Sneering Grin]} && ${Melee.AggroMode}) /casting "Sneering Grin"
/if (${Me.Combat} && ${Me.CombatAbilityReady[${StormwheelBlades}]} && ${Melee.AggroMode} && ${Me.XTarget}>=2) /disc ${StormwheelBlades}
/if (${Target.Distance}<35 && ${Me.Casting.Name.Equal[NULL]} && ${Me.PctAggro} < 100 && ${Me.AbilityReady[Taunt]}) /doability Taunt
/if (${Me.Combat} && ${Target.PctHPs}<=99 && ${Me.PctEndurance}>1 && ${Me.CombatAbilityReady[${Ridicule}]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /disc ${Ridicule}
/if (${Me.Combat} && ${Target.PctHPs}<=99 && ${Me.AltAbilityReady[Blast of Anger]} && !${Me.CombatAbilityReady[${KrondalRoar}]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /casting "Blast of Anger"
/if (${Me.Combat} && ${Target.PctHPs}<=99 && !${Me.AltAbilityReady[Blast of Anger]} && ${Me.AltAbilityReady[Rage of the Forsaken]} && !${Me.CombatAbilityReady[${KrondalRoar}]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /casting "Rage of the Forsaken"
/if (${Me.Combat} && ${Target.PctHPs}<=99 && ${Me.CombatAbilityReady[${HarassingShout}]} && !${Me.AltAbilityReady[Blast of Anger]} && ${Me.AltAbilityReady[Rage of the Forsaken]} && !${Me.CombatAbilityReady[Krondal's Roar]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /disc ${HarassingShout}
/if (${Me.Combat} && ${Target.PctHPs}<=99 && ${Me.CombatAbilityReady[${PhantomAggressor}]} && !${Me.CombatAbilityReady[${HarassingShout}]} && !${Me.AltAbilityReady[Blast of Anger]} && ${Me.AltAbilityReady[Rage of the Forsaken]} && !${Me.CombatAbilityReady[${KrondalRoar}]} && ${Melee.AggroMode} && ${Me.PctAggro}<100) /disc ${PhantomAggressor}
/if (${Me.Combat} && ${Me.AltAbilityReady[Area Taunt]} && ${Melee.AggroMode} && ${Me.XTarget}>=4) /casting "Area Taunt"
/if (${Me.Combat} && !${Me.CombatAbilityReady[${StormwheelBlades}]} && ${Target.PctHPs}<=99 && ${Me.PctEndurance}>1 && ${Me.CombatAbilityReady[${RoarofChallenge}]} && ${Melee.AggroMode} && ${Me.XTarget}>=3) /disc ${RoarofChallenge}
/if (${Me.Combat} && ${Me.AltAbilityReady[Warlord's Tenacity]} && ${Target.PctHPs}<=99 && ${Melee.AggroMode} && ${Me.XTarget}>=4) /casting "Warlord's Tenacity"
/if (${Me.Combat} && ${Me.AltAbilityReady[Warlord's Tenacity]} && ${Target.PctHPs}<=99 && ${Melee.AggroMode} && ${Target.Named}) /casting "Warlord's Tenacity"
/if (${Me.Combat} && !${Me.Song[Imperator's Command].ID} && ${Me.AltAbilityReady[Imperator's Command]} && ${Target.PctHPs}<=99 && ${Melee.AggroMode} && ${Me.XTarget}>=3) /casting "Imperator's Command"
/if (${Me.Combat} && !${Me.Song[Imperator's Command].ID} && ${Me.AltAbilityReady[Imperator's Command]} && ${Target.PctHPs}<=99 && ${Melee.AggroMode} && ${Target.Named}) /casting "Imperator's Command"
/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 (${Me.Class.ShortName.Equal[WAR]} && ${Me.Combat} && ${Me.CombatAbilityReady[Fortitude Discipline]} && ${Melee.AggroMode} && ${Me.XTarget}>=5) {
/stopdisc
/delay 4
/disc Fortitude Discipline
}
/if (${Me.Class.ShortName.Equal[SHD]} && ${Me.Combat} && ${Me.CombatAbilityReady[Deflection Discipline]} && ${Melee.AggroMode} && ${Me.XTarget}>=5) {
/stopdisc
/delay 4
/disc Deflection Discipline
}
/if (${Me.Class.ShortName.Equal[PAL]} && ${Me.Combat} && ${Me.CombatAbilityReady[Deflection Discipline]} && ${Melee.AggroMode} && ${Me.XTarget}>=5) {
/stopdisc
/delay 4
/disc Deflection Discipline
}
/if (${Me.Class.ShortName.Equal[WAR]} && ${Me.Combat} && !${Me.CombatAbilityReady[${Defensive2}]} && !${Me.CombatAbilityReady[${Defensive1}]} && ${Target.PctHPs}<98 && !${Me.Buff[Brace for Impact].ID} && ${Me.AltAbilityReady[Brace for Impact]} && ${Melee.AggroMode} && ${Me.XTarget}>=3) /casting "Brace for Impact"
/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 Offensive
/if (${Me.Class.ShortName.Equal[WAR]}) /return
/if (${Me.Class.ShortName.Equal[PAL]}) /return
/if (${Me.AltAbilityReady[Harm Touch]} && ${Target.Named} && !${Target.Type.Equal["corpse"]}) /casting "Harm Touch"
/if (${Me.AltAbilityReady[Visage of Death]} && ${Target.Named} && !${Target.Type.Equal["corpse"]}) /casting "Visage of Death"
/if (${Me.CombatAbilityReady[${ScarletBlade}]} && ${Target.Named} && !${Target.Type.Equal["corpse"]}) /disc ${ScarletBlade}
/if (${Me.AltAbilityReady[Visage of Death]} && ${Me.XTarget}>=4 && !${Target.Type.Equal["corpse"]}) /casting "Visage of Death"
/if (${Me.CombatAbilityReady[${ScarletBlade}]} && ${Me.XTarget}>=4 && !${Target.Type.Equal["corpse"]}) /disc ${ScarletBlade}
/return
Sub GeneralDeclares
/if (${Me.Class.ShortName.Equal[SHD]}) /declare iniName string outer DH_SK_${Me.Name}.ini
/if (${Me.Class.ShortName.Equal[WAR]}) /declare iniName string outer DH_WAR_${Me.Name}.ini
/if (${Me.Class.ShortName.Equal[PAL]}) /declare iniName string outer DH_PAL_${Me.Name}.ini
/declare IniPathFile string outer scouting.ini
/declare Path[5,26,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 LastHealSpell2 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 bdname string outer
/declare bd int outer 0
/declare shname string outer
/declare sh int outer 0
/declare CombatList string outer ${HateSpell1},${HateSpell2},${HateSpell3},${AeHateSpell1},${AeHateSpell2},${AeHateSpell3},${AeHateSpell4},${NukeSpell1},${NukeSpell2},${ChallengeSpell}|
/declare AeList string outer ${AeHateSpell1},${AeHateSpell2},${AeHateSpell3},${AeHateSpell4}
/declare Toon1 string outer ${Group.Member[1].Name}
/declare Toon2 string outer ${Group.Member[2].Name}
/declare Toon3 string outer ${Group.Member[3].Name}
/declare Toon4 string outer ${Group.Member[4].Name}
/declare LooterName string outer ${Group.Member[5].Name}
/declare MainAssist string outer ${Me.Name}
/declare GHealGroupHealth int outer 65
/declare GroupHealth int outer 0
/call DeclareIniVar BRD string Class kissassist
/call DeclareIniVar BST string Class kissassist
/call DeclareIniVar BER string Class kissassist
/call DeclareIniVar CLR string Class kissassist
/call DeclareIniVar DRU string Class kissassist
/call DeclareIniVar ENC string Class kissassist
/call DeclareIniVar MAG string Class kissassist
/call DeclareIniVar MNK string Class kissassist
/call DeclareIniVar NEC string Class kissassist
/call DeclareIniVar PAL string Class kissassist
/call DeclareIniVar RNG string Class kissassist
/call DeclareIniVar ROG string Class kissassist
/call DeclareIniVar SHD string Class kissassist
/call DeclareIniVar SHM string Class kissassist
/call DeclareIniVar WAR string Class kissassist
/call DeclareIniVar WIZ string Class afnuke
/call DeclareIniVar Aggro int Settings 0 /doaggro
/call DeclareIniVar UseCampfire int Settings 0
/if (${Me.Class.ShortName.Equal[WAR]}) {
/call DeclareIniVar SummonItem string Settings "Huntsman's Ethereal Quiver"
/call DeclareIniVar Ammo string Settings "Ethereal Arrow"
/call DeclareIniVar Defensive1 string Disc "Last Stand Discipline Rk. II"
/call DeclareIniVar Defensive2 string Disc "No Time to Bleed"
/call DeclareIniVar Defensive3 string Disc "Steadfast Defense"
/call DeclareIniVar PullSpell1 string Disc "Krondal's Roar"
/call DeclareIniVar PullSpell2 string Disc "Ridicule"
/call DeclareIniVar PullSpell3 string Disc "Ridicule"
/call DeclareIniVar HarassingShout string Aggro "Harassing Shout"
/call DeclareIniVar PhantomAggressor string Aggro "Phantom Aggressor"
/call DeclareIniVar StormwheelBlades string Aggro "Stormwheel Blades"
/call DeclareIniVar Ridicule string Aggro "Ridicule"
/call DeclareIniVar KrondalRoar string Aggro "Krondal's Roar"
/call DeclareIniVar RoarofChallenge string Aggro "Roar of Challenge"
/call DeclareIniVar BuffGem string Spells "12"
}
/if (${Me.Class.ShortName.Equal[PAL]}) {
/call DeclareIniVar Defensive1 string Disc "Reverent Penitence"
/call DeclareIniVar Defensive2 string Disc "Brightwing Mantle"
/call DeclareIniVar Defensive3 string Disc "Holy Guardian Discipline"
/call DeclareIniVar HateSpell1 string Spells "Valiant Deflection"
/call DeclareIniVar PullSpell1 string Spells "Demand for Honor"
/call DeclareIniVar PullSpell2 string Spells "Force of Reverence"
/call DeclareIniVar PullSpell3 string Spells "Force of the Iceclad"
/call DeclareIniVar StunSpell1 string Spells "Force of Reverence"
/call DeclareIniVar StunSpell2 string Spells "Force of the Iceclad"
/call DeclareIniVar StunSpell3 string Spells "Reverent Force"
/call DeclareIniVar StunSpell4 string Spells "Lesson of Sorrow"
/call DeclareIniVar ChallengeSpell string Spells "Demand for Honor"
/call DeclareIniVar HealSpell1 string Spells "Sorrow"
/call DeclareIniVar HealSpell2 string Spells "Aurora of Sunrise"
/call DeclareIniVar HealSpell3 string Spells "Burst of Sunrise"
/call DeclareIniVar GHealSpell1 string Spells "Wave of Sorrow"
/call DeclareIniVar BuffGem string Spells "12"
}
/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
/if (${Me.Class.ShortName.Equal[SHD]}) {
/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 ScarletBlade string Disc "Scarlet Blade"
/call DeclareIniVar PullSpell1 string Spells "Terror of Vergalid"
/call DeclareIniVar PullSpell2 string Spells "Terror of Vergalid"
/call DeclareIniVar PullSpell3 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"
/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
}
/declare Macro1 string outer ${${Group.Member[1].Class.ShortName}}
/declare Macro2 string outer ${${Group.Member[2].Class.ShortName}}
/declare Macro3 string outer ${${Group.Member[3].Class.ShortName}}
/declare Macro4 string outer ${${Group.Member[4].Class.ShortName}}
/declare Macro5 string outer ${${Group.Member[5].Class.ShortName}}
/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
/if (${Me.Class.ShortName.Equal[SHD]} && ${Me.AltAbilityReady[Voice of Thule]}) {
/target ${MainAssist}
/delay 5
/alt act 7000
}
/call CheckBuffies
/varset bufftimer 10s
/return
Sub MemSpell(SpellName,SpellGem)
/varset bufftimer 0
/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
/call Checkselfbuff
/return
Sub DoIMed
/if (${Me.PctEndurance}<=21) {
/sit
}
:keepmedding
/if (${Me.XTarget}<1 && ${Me.Sitting} && ${Me.PctEndurance}<=90) /goto :keepmedding
/return
|In case toons got stuck somewhere
Sub AnyoneLost
/bcg //multiline ; /target ${MainAssist} ;/navigate target
/delay 3s
/return
