I am probable going to get some flack for this one but oh well. HB is currently very impressive with what it has done and possibly could do. I am a long time macroer/afker back from the times of everquest(macroquest - mq2). Since this program is offset based it seems that the features could be similar to those of macroquest which with certin plugins was limitless in features.
To get an idea of the features and capabilities have a look here - http://www.macroquest2.com/wiki/index.php/Main_Page
The reason I bring this up is I created this macro that would AFK target kill and loot in a specified area with a high level of control. I am wondering if similar capabilities can be incorporated into HB with simplified macros yet a higher level of features and control?
To get an idea of the features and capabilities have a look here - http://www.macroquest2.com/wiki/index.php/Main_Page
The reason I bring this up is I created this macro that would AFK target kill and loot in a specified area with a high level of control. I am wondering if similar capabilities can be incorporated into HB with simplified macros yet a higher level of features and control?
Code:
#include spell_routines.inc
Sub Main
/declare CampRadius int outer 100
/declare PullDistance int outer 100
/declare MinPDistance int outer 0
/declare MaxZ int outer 35
/declare MinZ int outer -35
/declare StuckXLoc float outer 0.0
/declare StuckYLoc float outer 0.0
/declare Channel string outer /g
/declare StartZone int outer ${Zone.ID}
/declare IniFile string outer ${Me.Name}_pullbot.ini
/declare HomeXLoc int outer ${Me.X}
/declare HomeYLoc int outer ${Me.Y}
/declare HomeZLoc int outer ${Me.Z}
/declare Engaged outer FALSE
/declare Tagged outer FALSE
/declare LeechTouchPct string outer 20
/declare SKepic string outer "Innoruuk's Dark Blessing"
/declare SKepicGem string outer item
/declare SKepicPct string outer 38
/declare LifeTapSpell string outer "Touch of Tharoff Rk. II"
/declare LifeTapGem string outer gem4
/declare LifeTapPct string outer 65
/declare SnareSpell string outer "Festering Darkness"
/declare SnareGem string outer gem8
/declare PullSpell string outer "Terror of Jelvalak"
/declare PullGem string outer gem7
/declare AggroSpell string outer "Terror of Jelvalak"
/declare AggroGem string outer gem7
/declare AETaunt string outer "Revile"
/declare AETauntGem string outer gem2
/declare Debuff1 string outer "Challenge for Power Rk. II"
/declare Debuff1Gem string outer gem3
/declare Debuff1IconName string outer Challenge for Power Recourse Rk. II
/declare Buff1 string outer "Mask of Lament"
/declare Buff1Gem string outer item
/declare Buff1IconName string outer Hateful Guard
/declare Buff2 string outer "Stormeye Band"
/declare Buff2Gem string outer Item
/declare Buff2IconName string outer Storm Guard
/declare Buff3 string outer "Corrupted Spectral Shoulderguards"
/declare Buff3Gem string outer item
/declare Buff3IconName string outer Prismatic Ward I
/declare Buff4 string outer "Arcaapi Ventail"
/declare Buff4Gem string outer item
/declare Buff4IconName string outer Form of Endurance IV
/declare Buff5 string outer "Drape of Korafax Rk. II"
/declare Buff5Gem string outer gem9
/declare Buff5IconName string outer Drape of Korafax Rk. II
/declare Buff6 string outer "Shroud of the Blightborn"
/declare Buff6Gem string outer gem9
/declare Buff6IconName string outer Shroud of the Blightborn
/declare Buff7 string outer "Remorseless Demeanor Rk. II"
/declare Buff7Gem string outer gem9
/declare Buff7IconName string outer Remorseless Demeanor Rk. II
/declare Buff8 string outer "Umbral Skin"
/declare Buff8Gem string outer gem1
/declare Buff8IconName string outer Umbral Skin
/declare Buff9 string outer "Serrated Ear Spike"
/declare Buff9Gem string outer item
/declare Buff9IconName string outer Might of the Giants
:Main_Loop
/if (${Zone.ID} != ${StartZone}) /exit
/call PullMob
/if (${Zone.ID} != ${StartZone}) /exit
/call KillTarget
/if (${Zone.ID} != ${StartZone}) /exit
/call ReadyForNext
/if (${Zone.ID} != ${StartZone}) /exit
/call ResetVars
/goto :Main_Loop
/return
Sub PullMob
/echo Pull Loop
/call ReadyForNext
:Pull_Loop
/call GetTarget
/if (${Target.ID} && ${Target.Distance} < ${PullDistance}) /call TagTarget
/if (${Tagged} && ${Math.Distance[${HomeYLoc},${HomeXLoc}]} > 115) {
/call ReturnHome
/return
} else /if (${Tagged}) /return
/goto :Pull_Loop
/return
| GETS TARGET
Sub GetTarget
/if (${Zone.ID} != ${StartZone}) /exit
/declare s int local
/declare i int local 1
/delay 1
/if (${Target.PctHPs} > 50 && ${Math.Distance[${HomeYLoc},${HomeXLoc}]} > 120) {
/echo Moving Back To Camp
/call ReturnHome
}
/for i 1 to 80
/varset s ${NearestSpawn[${i},npc radius ${CampRadius}].ID}
|/echo Inifile value for ${Spawn[${s}].CleanName}: ${Ini[${IniFile},"Excludes.${Zone}","${Spawn[${s}].CleanName}"]}
/if (${Ini[${IniFile},"Excludes.${Zone}","${Spawn[${s}].CleanName}"].Equal[Exclude]}) {
|/echo Ignoring ${Spawn[${s}].CleanName} because of ini file inclusion.
/next i
}
/if (${Spawn[${s}].Type.Equal["Corpse"]} || !${Spawn[${s}].LineOfSight} || ${Math.Distance[${Me.Z}:${Spawn[${s}].Z}]} >${MaxZ} || ${Math.Distance[${Me.Z}:${Spawn[${s}].Z}]}<${MinZ}) {
| /echo Ignoring ${Spawn[${s}].CleanName} because LoS, Corpse or Z axis
/next i
}
/if (${s} && ${Spawn[${s}].Distance} < ${CampRadius} && ${Spawn[${s}].LineOfSight} && !${Spawn[${s}].Type.Equal["Corpse"]}) {
/echo Targeting ID ${s}
/target clear
/delay 1
/squelch /target id ${s}
/echo ${Target.Name} Has been aquired at distance ${Target.Distance}
/return
}
/next i
/return
Sub TagTarget
/if (${Zone.ID} != ${StartZone}) /exit
/if (${Target.Distance} >= ${PullDistance}) {
/echo Not Close enough, even though we're Supposed to be!
/call ResetVars
/return
}
/face
/echo Tagging Mob
/call cast ${PullSpell} ${PullGem} 10s
/delay 5 ${Me.Casting.ID}
/varset Tagged TRUE
|/squelch ${Channel} Incoming with [ %t ]
/return
Sub KillTarget
/delay 1
/if (!${Target.ID}) /return
/face
/declare WaitTimer timer local 0
/varset WaitTimer 15s
:WaitForMob
/echo ${WaitTimer} TIMER
/if (${Target.Distance} > 30) {
/if (!${WaitTimer}) /return
/echo Waiting For Target
/delay 5
/goto :WaitForMob
}
/echo IN COMBAT
/if (${Target.Distance} < 30) /stick 12
:Combat
/if (${Zone.ID} != ${StartZone}) /exit
/if (!${Me.Combat} && ${Target.Distance} < ${Target.MaxRangeTo}) /attack on
/if (${Target.ID}) /face
| COMBAT AREA
/if (!${Me.Song[${Debuff1IconName}].ID}) /call cast ${Debuff1} ${Debuff1Gem}
/if (${Me.PctHPs}<=${LeechTouchPct}) /alt activate 87
/if (${Me.PctHPs}<=${LifeTapPct}) /call cast ${LifeTapSpell} ${LifeTapGem}
|/if (${Me.PctHPs}<${SKepicPct}) /call cast ${SKepic} ${SKepicGem}
/if (${Me.PctHPs}<78 && ${Me.Song[Remorselessness].ID}) /call cast ${LifeTapSpell} ${LifeTapGem}
/if (${Target.PctHPs} > 40 && ${Math.Distance[${HomeYLoc},${HomeXLoc}]} > 115) {
/echo Moving Back To Camp
/call ReturnHome
}
| Primitive Add Control
/if (${SpawnCount[npc radius 20 zradius 20]} >= 2 && ${Me.SpellReady[${AETaunt}]}) {
/echo ADDS IN AREA!!!!
/call cast ${AETaunt} ${AETauntGem}
}
/if (${SpawnCount[npc radius 20 zradius 20]} >= 2 && !${Me.SpellReady[${AETaunt}]}) {
/echo ADDS IN AREA!!!!
/if (${Me.AltAbilityReady[822]}) /alt activate 822
}
/if (${Me.AltAbilityReady[825]}) /alt activate 825
/if (${Target.CleanName.Equal["a mechano steam warder"]} && ${Me.AltAbilityReady[6000]}) /alt activate 6000
/if (${Target.PctHPs} < 50 && ${Me.SpellReady[Festering Darkness]} && !${Target.Buff[Festering Darkness].ID}) /call cast "Festering Darkness" gem5
/if (${Target.Distance} > 140) {
/target clear
/varset Engaged FALSE
/return
}
/if (!${Me.TargetOfTarget.Name.Equal[${Me}]} && ${Target.Distance} < 25 && ${Me.AbilityReady["Taunt"]}) {
/doability "Taunt"
/call cast ${AggroSpell} ${AggroGem}
}
/if (!${Target.ID} || ${Target.Type.Equal[Corpse]}) {
/echo Target Clear
/squelch /target clear
/delay 3
/attack off
/delay 3
/call CheckForAdd
/if (${Target.ID}) /goto :Combat
/return
}
/goto :Combat
/return
Sub ReturnHome
/echo Too Far Away From Camp
/if (${Target.ID}) /face
/return
Sub MoveAround
/echo MOVIN AROUND
/keypress forward
/keypress back hold
/delay 1s
/keypress back
/if (${Math.Rand[2]}) {
/keypress strafe_right hold
} else {
/keypress strafe_left hold
}
/delay 1s
/keypress strafe_right
/keypress strafe_left
}
/call ReturnHome
/return
Sub CheckForAdd
/echo Checking For Adds
/declare s int local
/declare i int local
/for i 1 to 3
/varset s ${NearestSpawn[${i},npc].ID}
/if (${Spawn[${s}].Type.Equal["Corpse"]} || !${Spawn[${s}].LineOfSight}) /next i
/if (${Spawn[${s}].Distance} < 80 && ${Spawn[${s}].LineOfSight}) {
/squelch /target id ${s}
/goto :Got_Add
}
/next i
/return
:Got_Add
/varset Engaged TRUE
/face nolook fast
/squelch /stick 10 moveback
/delay 1s
/Doability "Taunt"
/call cast ${AggroSpell} ${AggroGem}
/delay 1s
/return
Sub ReadyForNext
/echo Buffing
/call ReturnHome
|/face heading ${Heading}
/if (!${Me.Buff[Prescience Rk. II].ID} && !${Me.Buff[Voice of Prescience Rk. II].ID} && !${Me.Buff[Dark Bargain Rk. II].ID}) {
/echo LICH
/call cast "Dark Bargain Rk. II" gem9
/delay 3s
}
/echo Start Buffs
/if (!${Me.Buff[${Buff1IconName}].ID} && !${Me.Combat}) /call cast ${Buff1} ${Buff1Gem}
/delay 10 !${Me.Casting.ID}
/if (!${Me.Buff[${Buff2IconName}].ID} && !${Me.Combat}) /call cast ${Buff2} ${Buff2Gem}
/delay 10 !${Me.Casting.ID}
/if (!${Me.Buff[${Buff3IconName}].ID} && !${Me.Combat}) /call cast ${Buff3} ${Buff3Gem}
/delay 10 !${Me.Casting.ID}
/if (!${Me.Buff[${Buff4IconName}].ID} && !${Me.Combat}) /call cast ${Buff4} ${Buff4Gem}
/delay 10 !${Me.Casting.ID}
/if (!${Me.Buff[${Buff5IconName}].ID} && !${Me.Combat}) /call cast ${Buff5} ${Buff5Gem}
/delay 10 !${Me.Casting.ID}
/if (!${Me.Buff[${Buff6IconName}].ID} && !${Me.Combat}) /call cast ${Buff6} ${Buff6Gem}
/delay 10 !${Me.Casting.ID}
/if (!${Me.Buff[${Buff7IconName}].ID} && !${Me.Combat}) /call cast ${Buff7} ${Buff7Gem}
/delay 10 !${Me.Casting.ID}
/if (!${Me.Buff[${Buff8IconName}].ID} && !${Me.Combat}) /call cast ${Buff8} ${Buff8Gem}
/delay 10 !${Me.Casting.ID}
/if (!${Me.Buff[${Buff8IconName}].ID} && !${Me.Combat}) /call cast ${Buff9} ${Buff9Gem}
/echo END BUFFS
/delay 20s !${Me.Casting.ID}
/return
Sub ResetVars
/delay 1
/attack off
/squelch /target clear
/squelch /keypress esc
/varset Engaged FALSE
/varset Tagged FALSE
/if (${Math.Distance[${HomeYLoc},${HomeXLoc}]} > 115) {
/echo Moving Back To Camp
/call ReturnHome
}
/return