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.
turbo
#Event resistsnare "Your target resisted the Bonds of Force spell#*#"
#Event resistroot "Your target resisted the Immobilize spell#*#"
#Event rootoff "Your Immobilize spell has worn off.#*#"
#include move.inc
#include spellcast.inc
#include lootmob.inc
Sub IntVars
/declare Spawned bool outer FALSE
/declare CurrentBox int outer
/declare Box1Y int outer -777
/declare Box1X int outer 724
/declare Box2Y int outer -921
/declare Box2X int outer 700
/declare Box3Y int outer -835
/declare Box3X int outer 535
/declare Box4Y int outer -688
/declare Box4X int outer 574
/declare SnareSpell string outer "Bonds of Force"
/declare RootSpell string outer "Immobilize"
/declare NukeSpell string outer "Conflagration"
/return
Sub Main
/call IntVars
/call LootFilterSetup
:MainLoop
/call GetReady
/call GetNPC
/call SnareIt
/call RootIt
/call NukeItLoop
/call LootIt
/call MoveHome
/call MedLoop
/goto :MainLoop
/return
Sub GetReady
:ManaLoop
/delay 5s
/echo Checking Mana
/if (${Me.PctMana} < 90) /goto :ManaLoop
/echo WE GOT MANA!
/return
Sub GetNPC
:NPCLoop
/keypress ESC
/keypress ESC
/keypress ESC
/keypress ESC
/target Watchman Grep
/delay 5s
/if (${Target.PctHPs}==0) {
/echo Well, he aint up!
/varset Spawned FALSE
/delay 5s
/goto :NPCLoop
}
/echo We have ${Target.CleanName} as our target.
/return
Sub SnareIt
/call goto ${Box1Y} ${Box1X}
/varset CurrentBox 1
/delay 1s
/call Cast ${SnareSpell}
/doevents
/return
Sub RootIt
/if (${Target.Distance}<40) {
/call NextBox
}
/delay 1s
/call cast ${RootSpell}
/doevents
/return
Sub NukeItLoop
:NukeItLoop
/if (${Target.Distance}<60) /call NextBox
/delay 5s
/doevents
/call cast ${NukeSpell}
/delay 1s
/doevents
/if (${Target.Distance}<60) /call NextBox
/if (${Target.PctHPs}>0) /goto :NukeItLoop
/return
Sub Lootit
/target Grep
/delay 1s
/call MoveToSpawn ${Target.ID} 5
/call LootMob
/return
Sub MoveHome
/call goto ${Box1Y} ${Box1X}
/varset CurrentBox 1
/return
Sub MedLoop
/keypress 9
/sit on
/return
Sub Event_resistsnare
/echo RESISTED! SNARE!
/call NextBox
/delay 1s
/call Cast ${SnareSpell}
/doevents
/return
/return
Sub Event_resistroot
/echo RESISTED! ROOT!
/call NextBox
/delay 1s
/call Cast ${RootSpell}
/doevents
/return
/return
Sub Event_rootoff
/echo ROOT IS OFF!!!!!!!!
/call NextBox
/call cast ${RootSpell}
/doevents
/return
Sub NextBox
/if (${CurrentBox}==1) {
/call goto ${Box2Y} ${Box2X}
/varset CurrentBox 2
/return
}
/if (${CurrentBox}==2) {
/call goto ${Box3Y} ${Box3X}
/varset CurrentBox 3
/return
}
/if (${CurrentBox}==3) {
/call goto ${Box4Y} ${Box4X}
/varset CurrentBox 4
/return
}
/if (${CurrentBox}==4) {
/call goto ${Box1Y} ${Box1X}
/varset CurrentBox 1
/return
}
/return
|================================================= ==|
|- move.inc |
| |
|Simple moving and object-avoidance routines |
| |
|Originally by beatnik007 (Who credits Mckorr) |
| |
|Revised and converted to MQ2Data by Terramantian |
|================================================= ==|
| Sub MoveToLoc |
|---------------------------------------------------|
|This simply moves the player to within 10 units of |
|the requested location, while avoiding obstacles |
| |
|This is beatnik007's original sub, with a few minor|
|changes and rewritten in MQ2Data format |
| |
|SYNTAX: /call MoveToLoc Y X |
Sub goto(MoveToY, MoveToX)
/echo Moving to Location: ${MoveToY}, ${MoveToX}.
/echo Distance: ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}
/declare running int local
/declare distanceNow float local
/declare distanceBefore float local
/declare distanceModifier int local
/varset running 0
/declare distanceTimer timer 15
/varset distanceBefore ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}
/varset distanceModifier 1
:moveToLocation
/face nolook loc ${MoveToY},${MoveToX}
/if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}<10) {
/keypress forward
/return
}
/if (${distanceTimer}==0) {
/if (${Me.Sneaking}) {
/varset distanceModifier 2
} else {
/varset distanceModifier 1
}
/varset distanceNow ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}
/if (${Math.Calc[${distanceBefore}-${distanceNow}]}<${Math.Calc[10/${distanceModifier}]}) {
/call strafePastObstacle
}
/varset distanceBefore ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}
/varset distanceTimer 15
}
/if (${running}==0) {
/keypress forward
/if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}>10) {
/varset running 1
/keypress forward hold
}
} else {
/if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}<11) {
/varset running 0
/keypress forward
}
}
/goto :moveToLocation
/return
| Sub MoveToSpawn |
|---------------------------------------------------|
|This moves the player to within a provided distance|
|of the provided spawn, while avoiding obstacles |
| |
|I "wrote" this, but as you can see, it's the same |
|as MoveToLoc with a few variable replacements. |
| |
|The second parameter, Distance, allows for the |
|player to stop short of the target by a certain |
|amount, to provide for different aggro radii, etc. |
| |
|SYNTAX: /call MoveToSpawn ID Distance |
Sub MoveToSpawn(MoveToID, StopDistance)
/if (!(${Defined[MoveToID]})||(${Spawn[MoveToID].ID})) {
/echo Spawn ID not found or no ID provided. Aborting...
/return
}
/if (!(${Defined[StopDistance]})) {
/echo Stopping point not defined, using default distance of 70
/declare StopDistance int local
/varset StopDistance 70
}
/echo Moving to Spawn: ${MoveToID} (${Spawn[${MoveToID}].CleanName}).
/echo Current Location: ${Spawn[${MoveToID}].Y}, ${Spawn[${MoveToID}].X}
/echo Current Distance: ${Spawn[${MoveToID}].Distance}
/declare running int local
/declare distanceNow float local
/declare distanceBefore float local
/declare distanceModifier int local
/varset running 0
/declare distanceTimer timer 15
/varset distanceBefore ${Spawn[${MoveToID}].Distance}
/varset distanceModifier 1
:moveToSpawn
/squelch /face fast nolook id ${MoveToID}
/if (${Spawn[${MoveToID}].Distance}<${StopDistance}) {
/keypress forward
/return
}
/if (${distanceTimer}==0) {
/if (${Me.Sneaking}) {
/varset distanceModifier 2
} else {
/varset distanceModifier 1
}
/varset distanceNow ${Spawn[${MoveToID}].Distance}
/if (${Math.Calc[${distanceBefore}-${distanceNow}]}<${Math.Calc[10/${distanceModifier}]}) {
/call strafePastObstacle
}
/varset distanceBefore ${Spawn[${MoveToID}].Distance}
/varset distanceTimer 15
}
/if (${running}==0) {
/keypress forward
/if (${Spawn[${MoveToID}].Distance}>=${StopDistance}) {
/varset running 1
/keypress forward hold
}
} else {
/if (${Spawn[${MoveToID}].Distance}<${StopDistance}) {
/varset running 0
/keypress forward
}
}
/goto :moveToSpawn
/return
| Only to be used by the previous functions - It's obvious what it does. |
sub strafePastObstacle
/keypress forward
/keypress back hold
/delay 2
/keypress back
/if (${Math.Rand[99]}>50) {
/keypress strafe_right hold
} else {
/keypress strafe_left hold
}
/delay 3
/keypress strafe_right
/keypress strafe_left
/keypress forward hold
/return