noclickhunt

A forum for you to dump all the macros you create, allowing users to use, modify, and comment on your work.

Moderator: MacroQuest Developers

mamba666
a lesser mummy
a lesser mummy
Posts: 49
Joined: Fri Aug 15, 2003 11:47 am

noclickhunt

Post by mamba666 » Thu Nov 13, 2003 12:19 am

Hi,

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.
| 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
/goto :DoneWalkString
}
/varsub v11 1
/delay 0
/goto :WalkString
:DoneWalkString
/varset Attacker "$left($v12,"$v10")"
/mqlog Being Hit by @Attacker
:StillEngaged
/return

sub Event_zoned

/sit on
/delay 5
/camp

/end




/return






The INI
| 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
Edit: I took out that sense heading thing. Thanks.
Last edited by mamba666 on Thu Nov 13, 2003 1:15 pm, edited 1 time in total.

OgreB
orc pawn
orc pawn
Posts: 12
Joined: Wed Jun 19, 2002 4:50 pm

Post by OgreB » Thu Nov 13, 2003 2:49 am

This is not needed anymore with the new changes.

|Work on sense heading skill
/if $char(ability,"Sense Heading")>0 /doability "Sense Heading"

Bio_War
a lesser mummy
a lesser mummy
Posts: 36
Joined: Sun Sep 29, 2002 1:03 pm

Include.mac

Post by Bio_War » Thu Nov 13, 2003 6:52 am

how would one go about making the include mac work form command line ex: /mac hunter eqynos, seems that it would be easier that way, you could run different location files, and not have to edit the macro to change each place you hunted.

Bio

zegot
decaying skeleton
decaying skeleton
Posts: 5
Joined: Sat Dec 13, 2003 7:16 pm

Post by zegot » Sat Dec 13, 2003 9:23 pm

Arrg I keep getting Can''t find autorun2 error. There's some copy & paste problems where I copy & pasted your code but got some lines that were mean't to be comments. Maybe post your working version with the "code" instead "quote"? I tried moving autorun2 all the way up but then i just run in a straight line...