Some notes.
Bots run the in the same patterns with very small variations.
This can be combated by throwing different coordinates out there, routes, to make the movement flow more human, this is what your doing, but one problem with doing this is that each route is the exact same pattern (click, sleep, hotkey, sleep, click, sleep, click, sleep, hotkey, sleep, hotkey, sleep, click) etc. To make it feel more human, you need to add a number of different paths, each with their own method (say, two clicks here, sleep, hotkeys, sleep, etc). Spread everything out, so that to get to the cellar, it sometimes takes 5-6 clicks instead of always 4.
This can be extended to my next point:
Bots don't usually do random things, humans do.
For example, somtimes we misclick a hotkey (say an attack key). Or have some "random" behaviors at different times. So instead of clicking 4 times, maybe we throw out a couple of attacks in there. If its always You run to cellar, if cellar is not there, teleport, its easy to detect.
Also, there are lots of points in the scripts where the sleeps are not randomized. If he always "sleep(800) THEN click vendor" then you can tell its a bot, because the time between clicks is always the same.
There should also be some different pathing for your general mouse movement. Humans don't always move from point A->B then click on B. There are some slight jitters here and there with one's mouse, circular movement, maybe overshooting the target, which can always be programmed as well.
I'm currently writing a good randomizing script that i'll pm to you. (not to show off, but maybe it will give you some good ideas).
Some snippets of code:
Code:
Func Rander($average, $range, $tolerance = 1.001)
while($tolerance < 1.001)
$tolerance = $tolerance + 0.0036
WEnd
$min = $average - ($range*0.5)
$max = $average + ($range*0.5)
$num = Random($min,$max)
$def = $average - $num
$res = Round($average + ($def * Random(1,$tolerance)))
Return $res
EndFunc
Func RSleep($average,$range = 10)
Sleep(Rander($average,$range))
EndFunc
Func RandBehavior($j = -1, $r = 1)
if $j = 0 Then
$j = Round(Random(0,6))
EndIf
$randy = Random($r,100)
if ($j = 0) Then ;chance that it will move the mouse out of the way
if($randy > 60) Then
RandMove(Round(Random(0, 400) * $x_ratio), Round(Random(700, 1080) * $y_ratio), 300,300)
RSleep(150)
if($randy > 85) Then
RandMove(Round(Random(200, 500) * $x_ratio), Round(Random(600, 900) * $y_ratio), 300,300)
RSleep(150)
EndIf
EndIf
ElseIf ($j = 1) Then ;random larger sleep
if($randy > 70) Then
RSleep(400,200)
if($randy > 90) Then
RSleep(200,100)
EndIf
EndIf
ElseIf ($j = 2) Then
if($randy > 70) Then ;random smaller sleep
RSleep(100,35)
if($randy > 90) Then
RSleep(150,10)
EndIf
EndIf
ElseIf ($j = 3) Then ;random attack
if($randy > 70) Then
RSleep(40)
Send("{SHIFTDOWN}")
RSleep(140,30)
$mC = MouseGetPos()
RandClick("right", $mC[0], $mc[1], 2, 2)
RSleep(150)
if($randy > 90) Then
$mC = MouseGetPos()
RandClick("right", $mC[0], $mc[1], 2, 2)
RSleep(150)
EndIf
Send("{SHIFTUP}")
RSleep(40)
EndIf
ElseIf ($j = 4) Then
if($randy > 70) Then ;random attack 2
$mC = MouseGetPos()
RandClick("right", $mC[0], $mc[1], 2, 2)
RSleep(150)
if($randy > 90) Then
$mC = MouseGetPos()
RandClick("right", $mC[0], $mc[1], 2, 2)
RSleep(150)
EndIf
EndIf
ElseIf ($j = 10) Then ;has a chance to call the GPH Tesserect script
if($randy > 30) Then
Call("GoldPerHour")
EndIf
ElseIf ($j = 11) Then
if($randy > 90) Then ;has a chance to leave game INSIDE the celler, instead of teleporting to town and then leaving game
Call("LeaveGame")
Return True
EndIf
EndIf
EndFunc
Rander(Average, Range, Tolerance) is a method which takes the average desired number, applies a random-ness to it within the desired range, with another adjustment to add an inconsistency to the mix.
RSleep(average, range) is just an easy way to add an R to sleep to get a randomized result.
RandBehavior(BehaviorNumber) is a method in which a random behavior that can (sometimes) occur happens at specific times. This adds "inconsistency" to the mix to try and increase the difference per run.
Note on your coding as well. Its better to organize all of the coordinates into an array, instead of it having 3 different methods, each the exact same.