testmeout Posted November 19, 2005 Share Posted November 19, 2005 I am needing some help figuring out how to code a conditional based on checksums. I am new to autoit and have figured out somethings but still have lots of questions.Here is my question I have calculated the checksums for several locations on an image, and want to assign the same value for several different checksums and then add them together. I want to cross reference $hole1 and $hole2 to the arrays listed and if they were to return $twoarray and $fourarray the sum would be 6, the following code is an idea of what I want to accomplish but this code wont work. How do I assign the same value to multiple checksums and then add the results of those together? Is using an array the correct way of doing this? $man = PixelChecksum(263, 57, 263+6, 57+12) $hole1 = PixelChecksum(263, 227, 263+6, 227+12) $hole2 = PixelChecksum(278, 227, 278+6, 227+12) Dim $twoarray[4] = [3748832232, 2738339650, 1625400038, 1772667105] Dim $threearray[4] = [2974719466, 1707260897, 1709416242, 3295460545] Dim $fourarray[4] = [4078934460, 2519251135, 1635752540, 1124317625] Dim $fivearray[4] = [1352832858, 3164059556, 3839399741, 2743842809] Dim $sixarray[4] = [1240763093, 558476565, 358779529, 4115115871] $twoarray[4] = 2 $threearray[4] = 3 $fourarray[4] = 4 $fivearray[4] = 5 $sixarray[4] = 6 Select Case $man = $twoarray[4] if $hole1 + $hole2 == 6 then MouseClick("left", 278, 411) EndSelect Link to comment Share on other sites More sharing options...
testmeout Posted November 19, 2005 Author Share Posted November 19, 2005 Will someone please help me correct my code. Or point me in the right direction. Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted November 19, 2005 Moderators Share Posted November 19, 2005 I looke at this twice now... once early this morning, and now. 1. I don't see the array. 2. You have specifically [4] defined with 4 pixelchecksums 3. Then you override the values of the same ones you just defined with 2,3,4,5,6. Is this all the code? Are you trying to do something like: While 1 $hole1 = PixelChecksum(263, 227, 263+6, 227+12) $hole2 = PixelChecksum(278, 227, 278+6, 227+12) Dim $twoarray[5] $twoarray[1] = 3748832232; gives the first value of the array $twoarray[2] = 2738339650; second value $twoarray[3] = 1625400038; third $twoarray[4] = 1772667105; fourth For $i = 1 To $twoarray[0] If $hole1 + $hole2 = $twoarray[$i] Then MouseClick("left", 278, 411) EndIf Next Sleep(10) For $x = 1 To etc... Next Wend ; then you could do a "For/Next Loop" for each of the arrays you are trying to set up. Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
testmeout Posted November 19, 2005 Author Share Posted November 19, 2005 ronsrules, Thanks for replying, and the example of code. I am very new to arrays and really don't know how to code them, or even if that is what I should be using in this code. The first half of what you did is what I am looking for, but I don't want to add the two checksums together. I want to have the four checksums return true for a variable, which that variable is assigned a number. Hopefully I can explain it better There are two spots in a window which can have multiple checksum results, 4 of which i want to return the same result. For example I think this array says that it will return true if any of the following checksums Dim $twoarray[5] $twoarray[1] = 3748832232; gives the first value of the array $twoarray[2] = 2738339650; second value $twoarray[3] = 1625400038; third $twoarray[4] = 1772667105; fourth I am not really familiar with arrays, and not sure if they can work as a logical or, but in ansi c++ it would be something like $man = PixelChecksum(263, 57, 263+6, 57+12) int $hole1(void) { int nValue = 0; if (PixelChecksum(263, 227, 263+6, 227+12) == (3748832232 || 2738339650 || 1625400038 || 1772667105)) nValue = 2; if (PixelChecksum(263, 227, 263+6, 227+12) == (2974719466 || 1707260897 || 1709416242 || 3295460545)) nValue = 3; if (PixelChecksum(263, 227, 263+6, 227+12) == (4078934460 || 2519251135 || 1635752540 || 1124317625)) nValue = 4; if (PixelChecksum(263, 227, 263+6, 227+12) == (1352832858 || 3164059556 || 3839399741 || 2743842809) nValue = 5; return(nValue); } if { ($man == (3748832232 || 2738339650 || 1625400038 || 1772667105)) && ($hole1 + $hole2 == 8) then MouseClick("left", 278, 411) Sorry about the mixing of code, this was the best way I could explain it. I hope this makes sense. Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted November 20, 2005 Moderators Share Posted November 20, 2005 You can add the others... Sounds like you just want an "Or" statement. Func CHECK_VALUE($nValue) Local $CHECK_ONE = PixelChecksum(263, 227, 263+6, 227+12) If $CHECK_ONE == 3748832232 Or $CHECK_ONE == 2738339650 Or $CHECK_ONE == 1625400038 Or $CHECK_ONE == 1772667105 Then $nValue = 2 Return $nValue EndFunc Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
testmeout Posted November 20, 2005 Author Share Posted November 20, 2005 Thank you so much that is what I needed. Two quick questions: To reference it later I just use $nValue == 4 Right? So to do the others I would do the following Func CHECK_VALUE($nValueman) Local $CHECK_MAN = PixelChecksum(263, 227, 263+6, 227+12) If $CHECK_MAN == 3748832232 Or $CHECK_MAN == 2738339650 Or $CHECK_MAN == 1625400038 Or $CHECK_MAN == 1772667105 Then $nValueman = 2 Return $nValueman EndFunc Func CHECK_VALUE($nValue1) Local $CHECK_ONE = PixelChecksum(263, 227, 263+6, 227+12) If $CHECK_ONE == 3748832232 Or $CHECK_ONE == 2738339650 Or $CHECK_ONE == 1625400038 Or $CHECK_ONE == 1772667105 Then $nValue = 2 Return $nValue1 EndFunc Func CHECK_VALUE($nValue2) Local $CHECK_TWO = PixelChecksum(263, 227, 263+6, 227+12) If $CHECK_TWO == 3748832232 Or $CHECK_TWO == 2738339650 Or $CHECK_TWO == 1625400038 Or $CHECK_TWO == 1772667105 Then $nValue2 = 2 Else $nValue2 = 0 Return $nValue2 EndFunc ETC.... And my other question is I can then change the $nValues based on what they add up to If $nValue1 == 11 AND $nValue1 + $nValue2 + $nValue3 > 21 Then $nValue1 = 1 If $nValue2 == 11 AND $nValue1 + $nValue2 + $nValue3 > 21 Then $nValue2 = 1 If $nValue3 == 11 AND $nValue1 + $nValue2 + $nValue3 > 21 Then $nValue3 = 1 If $nValue4 == 11 AND $nValue1 + $nValue2 + $nValue3 > 21 Then $nValue4 = 1 If $nValue5 == 11 AND $nValue1 + $nValue2 + $nValue3 > 21 Then $nValue5 = 1 Select Case $nValueman == 2 If $nValue1 + $nValue2 + $nValue3 < 11 AND $nValue1 Or $nValue2 != 11 MouseClick("left", 278, 411) If $nValue1 + $nValue2 + $nValue3 == 11 AND $nValue1 Or $nValue2 != 11 MouseClick("left", 218, 390) If 12 <= $nValue1 + $nValue2 + $nValue3 <= 14 AND $nValue1 Or $nValue2 != 11 MouseClick("left", 278, 411) EndSelect Does this look correct? Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now