This was a macro I had used for hunting before the new variable definitions. I changed it and got it to work.
It still needs touching up however. I think some variables are declared multiple times etc, but it works.
I would give credit to the original poster but I forget who it was.
Please feel free to clean it up.
This is the macro, an Ini will follow.
The INI| noclickhunt.mac
|
| The ultimate melee class.zone farming script
|
#turbo
#include eastkarana.mac
#event CannotSee "You cannot see your target"
#event TooFar "Your target is too far away"
#event HitsYou "YOU for"
#event zoned "LOADING, PLEASE WAIT..."
sub Main
/declare LootTotal global
/declare KSRadius global
/declare NoLOS global
/declare TooFarAway global
/declare MyTarget global
/declare MyHeading global
/declare TargetHeading global
/declare HeadingDelta global
/declare TargetDead global
/declare MyXLoc global
/declare MyYLoc global
/declare KSCheck global
/declare TargetLooted global
/declare LootSlot global
/declare CheckLoot global
/declare AttackedMe global
/declare BackHome global
/declare HomeY global
/declare HomeX global
/declare Attacker global
/declare v1 global
/declare targettimer timer
|/zapvars
/mqlog Hunter script v 20021007a started
| Set up Alert lists
/call SetAlerts
| Set up List of Loot to keep
/call SetLootList
| Set Home Point
/call SetHomePoint
| Set KS radius below. The script will not target a mob if a PC is within this radius of it.
/varset KSRadius 200
/varset targettimer 0
| Set Loot nodrop
/lootn never
|
| First off put clean up any open windows and make sure modifier keys are reset
/press esc
/press esc
/press esc
/press esc
/press alt
/press shift
/press ctrl
| Start of main Loop
:Start
| RestUp
/call RestUp
| Aquire nearest target to attack
/call GetTarget
| Advance
/call Advance
| Loot
/call Loot
| stuff on curser?
/call checkcurser
| /delay 0
/goto :Start
/return
| RestUp
sub RestUp
| Run to Home Base if needed
/if n $char(hp,pct)>50 /goto :NoRest
|Low on HP's running home
/mqlog HPs at $char(hp,pct) heading home
/call HomeBase
| If we didnt make it home we dont want to rest
/if n $return!=1 {
/mqlog Didnt make it home aborting run home
/goto :NoRest
}
| Make sure we are sat down.
/mqlog Reached home base resting
/sit on
:Rest
| Check if something has aggroed and attack it if it has.
/if n @AttackedMe==1 {
/mqlog aggroed whilst sitting
/sit off
/goto :NoRest
}
/delay 5
/if $char(ability,"Mend")>0 /doability "Mend"
/if n $char(hp,pct)<100 /goto :Rest
/mqlog Hps at $char(hp,pct) Off hunting again
}
:NoRest
/stand
/return
| Acquire Target subroutine
sub GetTarget
/if @targettimer>0 /return
:Acquire
/if @AttackedMe==1 {
/mqlog Targeted "$v13" who jumped me
/target "$v13"
/varset AttackedMe 0
} else /if "$alert(1)"=="TRUE" {
/target npc alert 1 nopcnear @KSRadius
/mqlog Targeted $target(name) range $target(distance) on alert list 1
} else /if "$alert(2)"=="TRUE" {
/target npc alert 2 nopcnear @KSRadius
/mqlog Targeted $target(name) range $target(distance) on alert list 2
} else {
/target npc alert 3 nopcnear @KSRadius
/mqlog Targeted $target(name) range $target(distance) on alert list 3
}
/varset MyTarget $target(id)
/varset TargetDead 0
/doevents
| /delay 15
/if n $target(id)==0 /goto :Acquire
/varset targettimer 30
/return
| Advance to mob subroutine
sub Advance
:Engage
|Process any events
/doevents
| Turn towards target
/face fast look
| If we are not within melee range then make sure we are on autorun
/if n $target(distance)>12 /call autorun2 1
| If we are still a distance away from target search for a closer one
/if n $target(distance)>200 {
/call GetTarget
}
| Save our current x,y loc
/varset MyXLoc $char(x)
/varset MyYLoc $char(y)
| Wait a then check loc again if we are on same spot call the obstacle routine to try and get around it
/delay 1
/if n @MyXLoc==$char(x) /if @MyYLoc==$char(y) /call Obstacle
| If we are within melee range stop running check Target again for other players engaged and attack if all OK.
/if n $target(distance)<15 {
/mqlog In melee range
/call autorun2 0
/varset KSCheck $target(id)
/call GetTarget
/if n @KSCheck==@MyTarget /call Melee
}
/call checkobstacles
/delay 0
/if n @TargetDead!=1 /goto :Engage
/mqlog Target is dead
/target id @MyTarget
/return
| Melee with mob subroutine
sub Melee
/mqlog Started melee
/attack on
:Combat
| Check events
/doevents flush
| Make sure were staring the critter out
/face fast look
| If we are too far away close in
/if n $target(distance)>10 {
/face fast look
/delay 2
| /call autorun2 1
/sendkey up down
/mqlog $target(distance,nopredict) from $target(name)
}
| If we are in melee range stop running
/if n $target(distance)<8 {
/call autorun2 0
/delay 2
/face fast look
/mqlog In melee with $target(name) at $target(hp,pct) I am at $char(hp,pct)
}
/doevents
| If we cannot see the target backup and face it again.
/if n @NoLOS==1 {
/mqlog Cannot see
/face fast look
/sendkey down down
/delay 4
/sendkey down up
/sendkey up down
/varset NoLOS 0
/delay 3
/sendkey up up
}
| If we are too far away close in
/if n @TooFarAway==1 {
/face fast look
/delay 2
/call autorun2 1
/varset TooFarAway 0
}
/if $char(ability,"Round Kick")>0 /doability "Round Kick"
/if $char(ability,"Kick")>0 /doability "Kick"
/if $char(ability,"Taunt")>0 /doability "Taunt"
/if $char(ability,"Slam")>0 /doability "Slam"
| Check if target is dead or we have lost it
/if n $target(id)==0 /varset TargetDead 1
|If we're getting wrecked, run like a fairy!
/if n $char(hp,pct)<15 /call RestUp
| Check for any obstacles we are supposed to avoid
|/call checkobstacles
| If target is still alive keep at it
/if n @TargetDead!=1 /goto :Combat
| Target is dead so stop attacking
/attack off
/varset AttackedMe 0
/return
| Loot mob
sub Loot
/varset TargetLooted 0
:Approach
/mqlog Advancing to corpse
|Process any events
/doevents
| Check we still have a target if not dont try to loot it
/if n $target(id)==0 /goto :Looted
| Turn towards target
/face fast look
| If we are within range loot corpse
/if n $target(distance)<15 {
/call autorun2 0
/loot
/delay 5
/goto :AtTarget
}
| If we are not within range then make sure we are on autorun
| /if n $target(distance)>12 /call autorun2 1
/if n $target(distance)>12 /call scooch
| Save our current x,y loc
/varset MyXLoc $char(x)
/varset MyYLoc $char(y)
| Wait and then check loc again if we are on same spot call the obstacle routine to try and get around it
/delay 3
/if n @MyXLoc==$char(x) /if @MyYLoc==$char(y) /call Obstacle
| Check for any obstacles we are supposed to avoid
/call checkobstacles
/delay 3
/goto :Approach
:AtTarget
|Begin Looting
/mqlog starting to loot
| /delay 5
| Cycle through each loot slot
/varset LootSlot 0
:LootLoop
| /delay 4
/click left corpse @LootSlot
/delay 5
/if "$cursor()"!="TRUE" /goto :NoLoot
/call lootthis
| Scan list of loot to keep and auto drop it if we are keeping it.
|** /varset CheckLoot 0
:GetLoot
/if "$cursor(name)"~~"@a(1,@CheckLoot)" {
/mqlog Looted $cursor(name)
/click left auto
/delay 5
/goto :Looted
}
/varadd CheckLoot 1
/delay 7
/if n @CheckLoot<@LootTotal /goto :GetLoot
| Checked list of loot to keep with no matches so destroy (must turn on fast destroy)
/mqlog Destroying $cursor(name)
| /delay 3
/click left destroy
/delay 3
**|
:Looted
/varadd LootSlot 1
/delay 5
/goto :LootLoop
:NoLoot
/delay 5
/press esc
/delay 5
/return
sub scooch
/sendkey up down
/delay 3
/sendkey up up
/return
sub HomeBase
/mqlog Heading Home
:RunHome
|Process any events
/doevents
|Work on sense heading skill
/if $char(ability,"Sense Heading")>0 /doability "Sense Heading"
|Check if we have aggroed something and stop running home if we have
/if n @AttackedMe==1 {
/mqlog $v13 Atacked be on the way home
/return
}
| Turn towards target
/face loc @HomeY,@HomeX
| If we are not within melee range then make sure we are on autorun
/if n $distance(@HomeY,@HomeX)>15 /call autorun2 1
| Save our current x,y loc
/varset MyXLoc $char(x)
/varset MyYLoc $char(y)
| Wait a then check loc again if we are on same spot call the obstacle routine to try and get around it
/delay 1
/if n $MyXLoc==$char(x) /if $MyYLoc==$char(y) /call Obstacle
| Check for any obstacles we are supposed to avoid
/call checkobstacles
| If we are within melee range stop running check Target again for other players engaged and attack if all OK.
/if n $distance(@HomeY,@HomeX)<15 {
/mqlog Reached Home
/call autorun2 0
/varset BackHome 1
}
/delay 0
/if n @BackHome!=1 /goto :RunHome
/varset BackHome 0
/return 1
sub Obstacle
| We appear to be stuck so try and backup and strafe sideways
/mqlog Ouch! ran into something
/sendkey up up
/sendkey down down
/delay 2
/doevents
/sendkey up down
/sendkey down ctrl
/if n $rand(99)>50 {
/sendkey down right
} else {
/sendkey down left
}
/delay 3
/doevents
/sendkey up right
/sendkey up left
/sendkey up ctrl
/sendkey down up
/return
sub lootthis
| This is Debug Output
| /echo checking if "$cursor(name)" is good loot
| 4 is the loottotal number someday i'll figure this variable out!
/for v1 0 to 1
/echo Checking if $cursor(name) is like @a(1,@v1) ?
/if "$cursor(name)"~~"@a(1,@v1)" /call lootup
/next v1
/if "$cursor()"=="TRUE" /click left destroy
/delay 5
/return
sub lootup
| Debug Output
| /echo Pocketing this $cursor(name)
/click left auto
/delay 7
/return
sub checkcurser
/if "$cursor()"=="TRUE" {
/press i
/delay 5
/click left auto
/delay 3
/press esc
/delay 3
}
/return
sub AvoidLoc(p0,p1,p2)
| Pass in 3 numbers first two are the Y and X locs of the point to avoid third one is the distance
you want to keep from it.
| This sub will check if you are within the distance specified and turn you away from the loc and
run you until you are the correct
| distance away. Too many calls to this sub will slow your main loop down badly so keep the areas
large and infrequent for best results.
| i.e. if there are a few huts together set a loc and radius that will cover the whole area rather
than each individual hut.
/if n $distance(@p0,@p1)>@p2 /goto :OK
/mqlog close to @p0 @p1
/if n $calc($heading(@p0,@p1)-$char(heading)<0 {
/face heading $calc($heading(@p0,@p1)-95)
} else {
/face heading $calc($heading(@p0,@p1)+95)
}
:RunAway
/call autorun2 1
/delay 1
/if n $distance(@p0,@p1)<@p2 /goto :RunAway
:OK
/return
Sub AutoRun2(p0)
/if @p0==1 /sendkey down up
/if @p0==0 /sendkey up up
/return
sub Event_TooFar
/varset TooFarAway 1
/return
sub Event_CannotSee
/varset NoLOS 1
/return
sub Event_HitsYou
/if "$combat"=="TRUE" /goto :StillEngaged
/varset AttackedMe 1
/varset v10 "$left($calc($instr("YOU","$p0")-1),"$p0")"
/varset v11 $strlen("$v10")
:WalkString
/if "$mid($v11,1,"$v10")"==" " {
/varset v12 $v11
/gotooneWalkString
}
/varsub v11 1
/delay 0
/goto :WalkString
oneWalkString
/varset Attacker "$left($v12,"$v10")"
/mqlog Being Hit by @Attacker
:StillEngaged
/return
sub Event_zoned
/sit on
/delay 5
/camp
/end
/return
Edit: I took out that sense heading thing. Thanks.| qeynos.mac
|
| Zone specific Info for Hunter Script
|#define HomeY v58
|#define HomeX v59
| This Sub sets up the alert lists for the mobs we want to hunt
|
sub SetAlerts
| Setup Alerts for the most important mobs here (rare)
|
/alert clear 1
/alert add 1 npc radius 1000 spiderling
| /alert add 1 npc radius 1000 skele
| /alert add 1 npc radius 1000 tad
|/alert add 1 npc range $calc($char(level)-4) $calc($char(level)+1) bat
|/alert add 1 npc range $calc($char(level)-4) $calc($char(level)+1) tad
|/alert add 1 npc range $calc($char(level)-4) $calc($char(level)+1) skele
|/alert add 1 npc range $calc($char(level)-4) $calc($char(level)-1) puma
|/alert add 1 npc range $calc($char(level)-4) $calc($char(level)-1) scarab
|/alert add 1 npc range $calc($char(level)-4) $calc($char(level)-1) orc
|/alert add 1 npc radius 500 skeleton
|/alert add 1 npc radius 1000 lion
|/alert add 1 npc radius 1000 bear
|/alert add 1 npc radius 500 large
|/alert add 1 npc radius 1000 wolf
| Setup Alerts for the next most important mobs here (uncommon)
|
/alert clear 2
|/alert add 2 npc radius 1000 lion
|/alert add 2 npc radius 1000 large
/alert add 2 npc radius 1000 bear
/alert add 2 npc radius 1000 puma
/alert add 2 npc radius 1000 spider
|/alert add 2 npc radius 800 wolf
| Setup Alerts for the next most important mobs here (common)
|
/alert clear 3
|/alert add 3 npc lion
|/alert add 3 npc kodiak
|/alert add 3 npc bear
|/alert add 3 npc puma
/alert add 2 npc radius 800 wolf
/alert add 3 npc radius 1000 spiderling
| Setup Alerts for Scary mobs here
|
| /alert clear 4
| /alert add 4 npc radius 10 corpse
|/alert add 4 npc radius 300 hill
|/alert add 4 npc radius 100 lion
/return
| This sub sets up the list loot we wish to keep.
|
sub SetLootList
/declare a array2
/declare LootTotal global
/varset a(1,0) "silk"
/varset a(1,1) "quality"
/varset a(1,2) "medium"
/varset a(1,3) "high"
/varset a(1,4) "low"
| Put number of items in list here.
/varset LootTotal 5
/return
| This sub sets our home point we return to if low on health
|
sub SetHomePoint
/declare HomeX global
/declare HomeY global
| Set home to be entrance of tunnel
/varset HomeX 5100
/varset HomeY -10
/mqlog Home Point is @HomeX, @HomeY
/return
| This sub does the checks to make sure we avoid certain specified areas
sub CheckObstacles
| this sub just calls avoidloc for each area i want to avoid in EC
| Single Hut Near WF Zone
|/call avoidloc 184 -856 30
| 2 Huts Near WF Zone
|/call avoidloc -154 -816 75
| Inn 1 Complex
|/call avoidloc -137 118 165
| Guard Post
|/call avoidloc 564 973 125
| Single Hut on path between inn1 and inn2
|/call avoidloc -106 1670 50
| Inn 2 Complex
| /call avoidloc -320 3042 130
| Undead Ruins
|/call avoidloc -963 2841 180
| Orc 1
|/call avoidloc 1004 2642 180
| Druids
|/call avoidloc 418 3800 100
| Hut Near Druids
|/call avoidloc 337 4063 30
| Orc 2
|/call avoidloc 974 4627 60
| Hidden Inn
|/call avoidloc 997 3692 90
| Altunic Jartins Hut
|/call avoidloc -118 4732 30
| Inn 3
|/call avoidloc 221 4835 140
/return

