Sign in to follow this  
Followers 0
LordNeo

Question about the forum

6 posts in this topic

I know it says not to discuss game automation here and that is not what I want to do.

However I do want to post an example of something I wrote earlier which was designed for that purpose (I do it for fun because I'm a gamer and like to test my abilities with autoit)

Anyway the question is...

Is it ok to post code without telling you what it is for when the code could easily be used for anything and ask about improving the way I'm writing code in general.

The code in question has no window titles or anything that would possibly lead you to what it was written for.

If I can't post this kind of code here is there a place I can post it in order to be critiqued?

Thanks (If this is ok to post I will edit and add it)

Share this post


Link to post
Share on other sites



Don't you think posting code without any information about what its purpose is or what it should do is just silly.

Now if you like to get feedback on your coding style/skills I suggest you just pick some code where you can give some information about its purpose. (or find a alternative purpose for the code in question.)

;)


"Straight_and_Crooked_Thinking" : A "classic guide to ferreting out untruths, half-truths, and other distortions of facts in political and social discussions."
"The Secrets of Quantum Physics" : New and excellent 2 part documentary on Quantum Physics by Jim Al-Khalili. (Dec 2014)

"Believing what you know ain't so" ...

Knock Knock ...
 

Share this post


Link to post
Share on other sites

Yeah it's kind of a gray area I know...

I don't see how posting something without giving the exact purpose would be silly.

For instance this code simply waits on 1/4 pixels to change then it goes into a wait period.

When those pixels have stopped changing for a set amount of time it logs the last pixel ID (1-4).

It then adds that to the array and then plays it back from start to finish.

But yeah If I can't post it simply for that reason it kind of stinks because this is how I challenge myself to write more...

There are a few things in particular I'm curious about with auto it.

For instance I don't know how large my array will be it could potentially be infinite.

So why should I have to declare

Local $array[255]

Such a large amount.

I'm sure there's a way to modify array size on the fly... Most scripting languages I'm familiar with you can use functions such as arrayadd("blah blah blah") and it just automatically creates a new index and fills it in.

I could be wrong though

Share this post


Link to post
Share on other sites

You can just ReDim your array when it gets full.

I just follow the double size rule for array ReDim.

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

So I would assume this means I need to make sure I ReDim the array before it gets full or it will crash right...

Or is there a way to do it as it would crash?

Thank you for the very helpful suggestion

#include <Array.au3>

AutoItSetOption( "MouseClickDelay", 150)
AutoItSetOption( "MouseClickDownDelay", 150)

HotKeySet("{F9}", "quit");hotkey to quit

Local $colorson[5]
Local $colorsonx[5]
Local $colorsony[5]
Local $recorded[255]

$colorson[0] = 16764108
$colorson[1] = 13434828
$colorson[2] = 13421823
$colorson[3] = 16777215


$colorsonx[0] = 763
$colorsony[0] = 603

$colorsonx[1] = 920
$colorsony[1] = 597

$colorsonx[2] = 764
$colorsony[2] = 727

$colorsonx[3] = 913
$colorsony[3] = 730

$wait1 = 50

$mode = 1
$waittime = 0
$length = 0

While 1=1
    $mouse = MouseGetPos()
    $colorsfound = 0
    if $mode = 1 Then
        $tooltip = "Stuff... " & $length & " - " & $waittime
        For $i = 0 To 4
            $pix = PixelGetColor( $colorsonx[$i], $colorsony[$i])
            if $pix = $colorson[$i] Then
                $tooltip = "A COLOR IS ON"
                $colorsfound = $colorsfound + 1
                $colorfound = $i
                $waittime = 0
                if $length = 0 Then
                    $recorded[$length] = $colorfound
                    $length = $length + 1
                EndIf
            EndIf
        Next
        if $colorsfound = 0 Then
            $waittime = $waittime + 1
            if $waittime > 16 Then
                if $length > 0 Then
                    $recorded[$length] = $colorfound
                    $length = $length+1
                    $mode = 3
                EndIf
            EndIf
        EndIf
    EndIf
    If $mode = 3 Then
        $pos = 1
        While $pos < $length
            sleep(25)
            $tooltip = "Playback... " & $pos
            $rnd = random( -15, 15, 1)
            MouseClick( "LEFT", $colorsonx[$recorded[$pos]]+$rnd, $colorsony[$recorded[$pos]]+$rnd, 1, 5)
            $rnd = random(5, 35)
            Sleep($rnd)
            $pos = $pos + 1
        WEnd
        $rnd = random( -25, 25)
            MouseMove( 834+$rnd, 655+$rnd, 0)
        $waittime = 0
        $mode = 1
    EndIf
    tooltip( $tooltip, 508+50, 458+25)
    sleep(25)
WEnd

func quit()
  MsgBox(0, "Goodbye", "You really messed it up this time!")
  Exit
EndFunc

There's the code in question with all comments removed.

Basically it's just a simple pixel search of 4 very specific coordinates... it waits for a change... logs last change by waiting for changes to stop... adds that change to the array...

then plays back the coords in the order they changed then repeats the entire process.

I do apologize for comment removal and lack of cleaning up now obsolete portions.

Edited by LordNeo

Share this post


Link to post
Share on other sites

#6 ·  Posted (edited)

Like so:

;### STACK DEFINITION ###
Global $STACK_MAX = 1 ;maximum size of the search stack
Global $STACK[$STACK_MAX] ;the search stack
$STACK[0] = 0 ;stack element counter
Func _Push($var) ;Utility function. DO NOT CALL
    If $STACK[0] > $STACK_MAX - 2 Then
        $STACK_MAX *= 2
        ReDim $STACK[$STACK_MAX]
    EndIf
    $STACK[0] += 1
    $STACK[$STACK[0]] = $var
    Return 1
EndFunc   ;==>_Push
Func _Pop() ;Utility function. DO NOT CALL
    If $STACK[0] > 0 Then
        $STACK[0] -= 1
        Return $STACK[$STACK[0] + 1]
    Else
        SetError(1)
    EndIf
    Return 0
EndFunc   ;==>_Pop
;### END STACK DEFINITION ###
Edited by omikron48

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0