Ok this script isnt perfect and at some times it freaks out a little bit but so far its pretty good and I havent run int any problems. For movemtn the home position is set as the bottom left corner of the zone at 132,-840. I used a few things that are still sort of new to me such as the ini files and the bazaar commands so there is probably a better way to do everything in my script but whatever, if it aint broke dont fix it. Although if you do see something that would actually work better then let me know.
To run the script your gonna need three things. Your gonna have to have the bazaar plugin and have it loaded. Also in this script I use two subroutines for movement that I have in my routines.mac files. I will post those at the bottom. Also you will have to create a ini file for yourself. Here is a sample of how to se it up.
v2 changes
-fixed patthing....added the walkmacro subroutine so that movement is natural and changed somethings so that you get to the right isle (a few of the if statements were messed ip. However if you dont want to make you own path.ini file then you will need to get mine and since it is too big to just copy here you can download it from my webspace. http://www.wsu.edu/~ellyson/path.ini
-edited out the .00 in the ini files 2 instead of 2.00 should work now.
-built all the subroutines you will need into the script so that noone will PM asking for more routines.
-Cleaned up the codea little....but I still got some work to do on it.
Code: Select all
[names] /this is where all the names of the items you will be looking for
val1=words of poop
val2=rune of crap
val3=page of diareah
/I could probably make it so you dont have to have the .00 after every item past 1 but...it doesnt bother me so I dont care/
[prices] /this is were you put the sell back value of the items above
val1=1000 /sellback value of words of poo 1pp
val2=3456 /sellback value of rune of crap 3pp 4gp 5sp 5cp
val3=234 /sellback value of rune of diareah 2gp 3sp 4cp
Code: Select all
|Driftinsupra's first usefull macro bazarr.mac
|Dumpster diving script. Buy from players and sell to merchants for a profit!
#turbo
sub main
/declare file global
/declare isle global
/declare counter local
/declare l1 local
/declare traderid local
/declare price local
/varset file C:\macroquest2\release\macros\newini.ini
/varset counter 1
:mainloop
/if "$ini(@file,names,val@counter)"=="NOTFOUND" {
/echo Starting search over
/varset counter 1
/goto :mainloop
}
/echo searching for $ini(@file,names,val@counter)
/bzsrch race any class any $ini(@file,names,val@counter)
| is request done?
:loop
/delay 1
/if "$bazaar()"=="FALSE" /goto :loop
/if n $bazaar(count)==0 {
/echo $ini(@file,names,val@counter) not found, continuing on...
/varadd counter 1
/varset counter $int(@counter)
/goto :mainloop
}
} else {
/echo found $bazaar(count) items
}
/varset price $bazaar(0,price)
/varset traderid $bazaar(0,trader)
/if n $bazaar(count)>1 {
/for l1 1 to $calc($bazaar(count)-1)
/echo @l1 price $bazaar(@l1,price)
/if n @price>$bazaar(@l1,price) {
/varset price $bazaar(@l1,price)
/varset traderid $bazaar(@l1,trader)
}
/next l1
}
/if n @price>=$ini(@file,prices,val@counter) {
/varadd counter 1
/varset counter $int(@counter)
/echo @counter
/goto :mainloop
}
/echo targeting @traderid
/target id @traderid
/face
/call traderisle $target(x) $target(y)
/call movetoisle @isle
/face
/call movetotarg 10
/click right target
/delay 20
/call buyitem "$ini(@file,names,val@counter)"
/call moveback @isle
/call walkpath merch 10
/target "Merchant Tekram"
/face
/delay 10
/click right target
/delay 20
/selectitem "$ini(@file,names,val@counter)" self
/sendkey down shift
/click left merchant sell
/sendkey up shift
/delay 20
/click left merchant done
/call walkpath merchb 10
/goto :mainloop
/return
Sub movetoisle(isle)
/if n @isle==61 /call walkpath 61 10
/if n @isle==62 /call walkpath 62 10
/if n @isle==81 /call walkpath 81 10
/if n @isle==82 /call walkpath 82 10
/if n @isle==91 /call walkpath 82 10
/if n @isle==92 /call walkpath 92 10
/if n @isle==51 /call walkpath 51 10
/if n @isle==52 /call walkpath 52 10
/if n @isle==21 /call walkpath 21 10
/if n @isle==22 /call walkpath 22 10
/if n @isle==31 /call walkpath 31 10
/if n @isle==32 /call walkpath 32 10
/return
Sub traderisle(xloc,yloc)
/if n @xloc>95 /if n @xloc<129 /if n @yloc>-770 /if n @yloc<-589 /varset isle 61
/if n @xloc<95 /if n @xloc>62 /if n @yloc>-770 /if n @yloc<-589 /varset isle 62
/if n @xloc>-104 /if n @xloc<-72 /if n @yloc>-772 /if n @yloc<-590 /varset isle 81
/if n @xloc<-104 /if n @xloc>-145 /if n @yloc>-772 /if n @yloc<-590 /varset isle 82
/if n @xloc>-203 /if n @xloc<-171 /if n @yloc>-713 /if n @yloc<-527 /varset isle 91
/if n @xloc<-203 /if n @xloc>-250 /if n @yloc>-713 /if n @yloc<-527 /varset isle 92
/if n @xloc>-118 /if n @xloc<107 /if n @yloc<-541 /if n @yloc>-571 /varset isle 51
/if n @xloc>-118 /if n @xloc<107 /if n @yloc>-541 /if n @yloc<-514 /varset isle 52
/if n @xloc>95 /if n @xloc<129 /if n @yloc>-495 /if n @yloc<-296 /varset isle 21
/if n @xloc<95 /if n @xloc>62 /if n @yloc>-495 /if n @yloc<-296 /varset isle 22
/if n @xloc>-104 /if n @xloc<-72 /if n @yloc>-495 /if n @yloc<-296 /varset isle 31
/if n @xloc<-104 /if n @xloc>-145 /if n @yloc>-495 /if n @yloc<-296 /varset isle 32
/return
Sub moveback(isle)
/if n @isle==61 /call walkpath 61b 10
/if n @isle==62 /call walkpath 62b 10
/if n @isle==81 /call walkpath 81b 10
/if n @isle==82 /call walkpath 82b 10
/if n @isle==91 /call walkpath 82b 10
/if n @isle==92 /call walkpath 92b 10
/if n @isle==51 /call walkpath 51b 10
/if n @isle==52 /call walkpath 52b 10
/if n @isle==21 /call walkpath 21b 10
/if n @isle==22 /call walkpath 22b 10
/if n @isle==31 /call walkpath 31b 10
/if n @isle==32 /call walkpath 32b 10
/return
sub buyitem(item)
/sendkey down Ctrl
/selectitem "@item" merchant
/click left merchant buy
/delay 20
/sendkey up Ctrl
/click left merchant done
/return
Sub walkpath
|Initialization
|Note -- Edit the following line to represent the full path where you want your Paths.ini file
| to be stored. Like: "c:\macroquest\macros\data\Paths.ini"
/declare gINIFile local
/declare gPathNumber local
/declare gStartPoint local
/declare gEndPoint local
/declare gStep local
/declare gThreshold local
/declare tEchoTimer timer
/declare l0 local
/declare l1 local
/declare l2 local
/declare l3 local
/declare pointface local
/declare MyXLOC local
/declare MyYLOC local
/declare ObstCount local
/varset gINIFile "C:\macroquest2\release\macros\path.ini"
/varset gPathNumber @Param0
/varset gThreshold @Param1
/varset gStartPoint @Param2
/varset gEndPoint @Param3
/varset pointface 0
/if @gThreshold=="" {
/echo No Threshold specified -- using 3.
/varset gThreshold 2
}
/if n @gStartPoint==0 {
/varset gStartPoint 1
/varset gEndPoint $int($ini("@gINIFile","@gPathNumber","numpoints"))
}
/if n @gStartPoint==-1 {
/varset gEndPoint 1
/varset gStartPoint $int($ini("@gINIFile","@gPathNumber","numpoints"))
}
/varset l0 @gStartPoint
/if @gStartPoint<@gEndPoint {
/varset gStep 1
} else /if @gStartPoint>@gEndPoint {
/varset gStep -1
}
/varset l1 $int($ini("@gINIFile","@gPathNumber","$int(@l0) Y"))
/varset l2 $int($ini("@gINIFile","@gPathNumber","$int(@l0) X"))
/face loc @l1, @l2
/call AutoRun 1
:MainLoop
/varset l1 $int($ini("@gINIFile","@gPathNumber","$int(@l0) Y"))
/varset l2 $int($ini("@gINIFile","@gPathNumber","$int(@l0) X"))
/varset tEchoTimer 5
/if @l0==@gStartPoint /echo $distance(@l1,@l2)
/varset MyXLOC $char(x)
/varset MyYLOC $char(y)
/varset ObstCount 0
:MainLoop2
/doevents
/if @tEchoTimer==0 {
/varset tEchoTimer 1s
/echo $distance(@l1,@l2)
}
|The 'fast' paramater of the /face function prevents the command
|from smoothing out the turn, and instead immediately turns your
|character to face the specified direction. It is commented out here
|in favor of the smoothed /face, because it looks more natural and
|realistic. However, you will see problems with high-resolution paths
|(ie, paths in which the distances in between snapshots is very low) where
|your character will run in circles around points. There are two things
|you can do about this. The first is to increase the DistanceThreshold
|number that you pass when you start the script. The second is to uncomment
|the "/face fast nopredict" line, and comment the "/face nopredict" line.
|This will look a little less natural, but if you're using a high-
|resolution path in the first place, it really shouldn't matter.
|Another time where you might want to use /face fast is in dungeons or
|other tight areas where precision is important.
/face fast nopredict loc @l1, @l2
|/if n pointface<=1 /face loc @l1, @l2
/varadd pointface 1
/varadd ObstCount 1
/if n @ObstCount>=10 {
/if n @MyXLOC==$char(x) /if n @MyYLOC==$char(y) {
/sendkey up up
/sendkey down down
/if n $rand(99)>50 {
/delay 1s
/sendkey up down
/sendkey down Right
/delay 5
/sendkey up Right
/sendkey down up
/delay 1s
/sendkey up up
} else {
/delay 1s
/sendkey up down
/sendkey down left
/delay 5
/sendkey up left
/sendkey down up
/delay 1s
/sendkey up up
}
/face loc @l1, @l2
/call autorun 1
/sendkey up Right
/sendkey up Left
}
/varset MyXLOC $char(x)
/varset MyYLOC $char(y)
/varset ObstCount 0
}
/if n $distance(@l1,@l2)>@gThreshold /goto :MainLoop2
/echo Point @l0 Reached.
/varset pointface 0
/varset l0 $int($calc(@l0+@gStep))
/if @l3==1 /goto :MainLoopExit
/if @l0==@gEndPoint /varset l3 1
/goto :MainLoop
:MainLoopExit
/call AutoRun 0
/echo Destination reached. Exiting.
/return
Sub AutoRun
/if @Param0==1 /sendkey down up
/if @Param0==0 /sendkey up up
/return 


