ฟอรั่มของบล็อก http://pssix.blogspot.com


ชี้แนะสคริปต์+การหาค่าสีทีครับ

Share

klenium
มือใหม่เพิ่งสมัคร
มือใหม่เพิ่งสมัคร


จำนวนข้อความ : 4
ความนิยม : 0
เข้าร่วมเมื่อ : 16/02/2013

ชี้แนะสคริปต์+การหาค่าสีทีครับ

ตั้งหัวข้อ by klenium on 06/03/13, 04:32 pm

ทดลองมาหลายวันแล้วครับ
ชื่อเกมที่ทดสอบ [You must be registered and logged in to see this link.]

ลำดับขั้นตอนแบบคร่าวๆ
1กดบัฟ
2หามอนแล้วคลิกโจมตี (ใส่หน่วงเวลา)
3หามอนเพื่อกดเก็บของ
4กดเก็บของ

อยากให้ช่วยแนะนำเพิ่มเติมสคริปต์ครับในส่วนของ
1เมื่อกดโจมตีมอนแล้ว อยากให้เช็คเลือดมอน( 0x732626 )ถ้าตายแล้วจะได้ไปฟังชั่นต่อไปโดยไม่ต้องใช้วิธีเดิมคือใส่หน่วงเวลาไว้
2หลังจากมอนตายแล้ว มอนเกมนี้ไม่เปลี่ยนสี จึงสั่งให้กดคลิกที่ตัวมอนไม่ได้ เพราะอาจจะไปกดโจมตีมอนตัวต่อไปแทนที่จะกดเพื่อเก็บของ ผมจึงแก้ปัญหาโดยการใช้คำสั่งหาสีแทน โดยลดระยะกรอบในการหาให้แคบลง...มีวิธีอื่นที่ดีกว่านี้ไหมครับ (ที่คิดไว้คือ ในคำสั่งหาสีมอน อยากให้เริ่มหาจากจุดตรงกลางของตัวเกมแล้วขยายขอบเขตที่ละนิดคับ) หรือมีวิธีอื่นดีกว่านี้ โปรดชี้แนะด้วยครับ
em229

Code:
Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)
Opt("CaretCoordMode", 2)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HotKeySet ( "{ESC}" ,"Terminate")
HotKeySet ( "{F4}" , "Pause")
Global $Paused

Func Terminate()
ConsoleWrite(' bot exit ' & @error & @crlf)
Exit
EndFunc
Func Pause()
$Paused = NOT $Paused
    ConsoleWrite(' bot pause ' & @error & @crlf)
sleep(100)
EndFunc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Global $GameHD  ;ประกาศตัวแปร $GameHD เพื่อนำไปใช้ทั้งเกม
Global $begin = TimerInit(), $B1 = 1200, $B2 = 1800, $B3 = 1200, $B4 = 1200, $B5 = 1800,$B6 = 1780
AdlibRegister("buff", 200)
Global $monster[1] = [ 0x00FE00];สีมอน
Global $loot[4] = [ 0xA9A9A9,0x939393,0x3D0303,0x300850];สีไอเทมที่จะเก็บ


Func _PSsixLoadH($gtitle) ;ฟังก์ชันสำหรับตรวจหาหน้าต่างเกม
$GameHD = WinGetHandle($gtitle) ;ดึงเอาค่า Handle ของหน้าต่างเกมเก็บไว้ในตัวแปร $GameHD
If @error Then
MsgBox(4096, "Error", "ไม่พบหน้าต่างเกม") ;ถ้าไม่เจอหน้าต่างเกมแสดงกรอบหน้าต่างแจ้งให้ทราบ
Else
Return 1
EndIf
EndFunc

If _PSsixLoadH("Fantasy Online - The Epic Free MMORPG - Google Chrome") Then WinActivate($GameHD) ;ส่งค่าชื่อไตเติลเกมเข้าไปยังฟังก์ชัน หากตรวจพบก็จะสั่งให้เด้งหน้าต่างเกมขึ้นมา


While Sleep(100)
  SearchMon() ;ค้นหา
  Sleep(2000) ;หน่วงเวลาในการโจมตีมอนต่อ1ตัว
  HP()
  pickmon() ;เลือกมอนที่จะเก็บของ
  Sleep(1000)
    loot() ;เก็บของ
Sleep(100)

WEnd

;;;;;;;;;;;;;;;;;;;;;;ALL Function;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Func SearchMon()
Sleep(100)
For $i = 0 To UBound($monster)-1
    $coord = PixelSearch( 310,185,746,539, $monster[$i] )
    If IsArray($coord) Then

        ConsoleWrite(_GetTodaysDate() & 'Atkmon at' & $coord[0]&'x' & $coord[1] & @error & @crlf)
MouseClick("",$coord[0] , $coord[1],2,0) ;สั่งกดมอน
Sleep(100)
EndIf
Next
EndFunc

Func pickmon()
Sleep(100)
For $i = 0 To UBound($monster)-1
    $coord = PixelSearch( 490,290,570,375, $monster[$i] )
    If IsArray($coord) Then
    MouseClick("",$coord[0] , $coord[1],1,0) ;สั่งกดมอน
Sleep(100)
EndIf
Next
EndFunc

Func loot()
 For $i = 0 To UBound($loot)-1
    $coord = PixelSearch( 568,382,654,469, $loot[$i] )
    If IsArray($coord) Then
        ConsoleWrite(_GetTodaysDate() & 'lootItem at' & $coord[0]&'x' & $coord[1] & @error & @crlf)
MouseClick("",$coord[0] , $coord[1],1,0) ;สั่งกดมอน
Sleep(1000)
EndIf
Next
EndFunc


 Func HP()
    sleep (100)
  If PixelGetColor( 266,135) = 0x590000 Then ;หลอดเลือด 187-286
    MouseClick("",552, 570,1,0)
    sleep(3000)
    MouseClick("",552, 570,1,0)
    sleep(3000)
    MouseClick("",552, 570,1,0)
    sleep(3000)
    EndIf

EndFunc

Func _GetTodaysDate($iReturnTime = 1)
    Local $aMDay[8] = [7, "Sun", "Mon", "Tue", "Wed", "Thur", "Fri", "Sat"], _
            $aMonth[13] = [12, "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], $aTime[2]=["",''&@HOUR&':'&@MIN&' =']
    Return $aMDay[@WDAY]&',['&@MDAY&'/' & $aMonth[@MON] & '/' & @YEAR &']'& $aTime[$iReturnTime]
EndFunc  ;==>_GetTodaysDate


func buff()
$Diff = Int(TimerDiff($begin)/1000)

If mod( $Diff, $B1) = 0 Then
;Send("2") ;ช่องสกิลที่ 2
MouseClick("",321, 570,1,0)
sleep(3000)
EndIf

If mod( $Diff, $B2) = 0 Then
;Send("3") ;ช่องสกิลที่ 3
MouseClick("",354, 570,1,0)
sleep(3000)
EndIf

If mod( $Diff, $B3) = 0 Then
;Send("4") ;ช่องสกิลที่ 4
MouseClick("",387, 570,1,0)
sleep(4000)
EndIf

If mod( $Diff, $B4) = 0 Then
;Send("5") ;ช่องสกิลที่ 5
MouseClick("",420, 570,1,0)
sleep(4000)
EndIf

If mod( $Diff, $B5) = 0 Then
;Send("8") ;ช่องสกิลที่ 8
MouseClick("",519, 570,1,0)
sleep(4000)
EndIf

If mod( $Diff, $B6) = 0 Then
;ไอเทมในช่องเก็บของช่องแรก
MouseClick("",772, 419,2,0)
sleep(2000)
EndIf
EndFunc
; พิกัดปุ่มกด
;    1 = 288, 570
;    2 = 321, 570
;    3 = 354, 570
;    4 = 387, 570
;    5 = 420, 570
;    6 = 453, 570
;    7 = 486, 570
;    8 = 519, 570
;    9 = 552, 570
;    0 = 585, 570
avatar
flapjack
PSsix Member Super Class III
PSsix Member Super Class III

PSsix Moderator PSsix Master PSsix Game Coder
จำนวนข้อความ : 312
ความนิยม : 74
เข้าร่วมเมื่อ : 05/10/2010

Re: ชี้แนะสคริปต์+การหาค่าสีทีครับ

ตั้งหัวข้อ by flapjack on 06/03/13, 10:32 pm

ข้อ 1 น่ะครับ
ต้องการลูปเข้าช่วยในการเช็ค(หลังจากคลิกโจมตีีแล้ว)
Code:

While PixelGetColor(แกน x,แกน y) = 0x732626

WEnd
ซึ่งต้องรู้พิกัดที่แน่นอน

ข้อ 2 อันนี้ผมไม่แน่ใจน่ะครับว่าจะใช้ได้หรือเปล่า
เราควรจำพิกัด ของมอนที่ตายหลังจากการโจมตี (ถ้ามอนไม่ได้ขยับไปไหนตอนโจมตี)

ท่านใดมีข้อเสนอหรือแนวทาง ก็ชี้แน่ะเลยน่ะครับ

klenium
มือใหม่เพิ่งสมัคร
มือใหม่เพิ่งสมัคร


จำนวนข้อความ : 4
ความนิยม : 0
เข้าร่วมเมื่อ : 16/02/2013

Re: ชี้แนะสคริปต์+การหาค่าสีทีครับ

ตั้งหัวข้อ by klenium on 06/03/13, 11:29 pm

ข้อ1ได้ละครับ ขอบคุณ flapjack มากมาย... ตีไวกว่าเดิมเยอะเลย
ส่วนข้อ2 มอนมันไม่นิ่งครับ มันจะขยับเข้ามาหาเราหลังจากเราสั่งโจมตีที่พิกัดสีครับ em246

loveapple244
PSsix Member Super Class II
PSsix Member Super Class II

PSsix Game Coder
จำนวนข้อความ : 160
ความนิยม : 9
เข้าร่วมเมื่อ : 15/07/2011

Re: ชี้แนะสคริปต์+การหาค่าสีทีครับ

ตั้งหัวข้อ by loveapple244 on 07/03/13, 09:01 am

PixelSearch มีการหาค่ามอนแล้วแต่จากที่ลองก๊อฟไปลองใช้มันไม่มีPixelSearchสำหรับทราบว่าPixelSearchยังตีมอนอยู่พอมีมอนอยู่ต้อง SearchMonหยดการทำงานและให้PixelSearchเพื่อให้ตีมอนแล้วถ้ามอนเป็นเท็จก็ให้กลับไปยัง SearchMonแล้วหน่วงเวลาในการค้นหาและคิ๊กควรเป็น700msมากกว่าเพราะเราลองเกมส์ออนไลน์มามันอยู่ที่700msนะแต่เราไม่เก่งแบบเธออะเลยไม่รู้เขียนยังไงแต่เกมส์ที่เราเขียนนะมันเขียนแบบว่าหาสีมอนแล้วมอนยังตีคือสีฟ้าแล้วตีมอนอยู่ถ้าสีฟ้าคือตีมอนหายไปให้หามอนต่อลองดูโค๊สเราก็ได้เผื่อเป็นแนวอันนี้ใช้ได้จิงๆนะเพราะใช้มา1ปีแล้วสคิปนี้
HotKeySet("{ESC}", "stop")
Global $GameHD ;ประกาศตัวแปร $GameHD เพื่อนำไปใช้ทั้งเกม
Func _PSsixLoadH($gtitle)
$GameHD = WinGetHandle($gtitle) ;ดึงเอาค่า Handle ของหน้าต่างเกมเก็บไว้ในตัวแปร $GameHD
If @error Then
MsgBox(4096, "Error", "ไม่พบหน้าต่างเกม") ;ถ้าไม่เจอหน้าต่างเกมแสดงกรอบหน้าต่างแจ้งให้ทราบ
Else
Return 1
EndIf
EndFunc

If _PSsixLoadH("xxxx") Then WinActivate($GameHD)

Func stop()
Exit
EndFunc

AdlibRegister("atk", 1000)
While 1

Sleep(850)
WEnd
Func Mon()

$le = PixelSearch(363, 365, 1120, 755, 0x16AABF ,10)
If @error Then
ToolTip('ไม่พบสีฟ้า', 0, 0)
AdlibUnRegister("Mon")
Sleep(850)
AdlibRegister("atk", 100)
EndIf
EndFunc

Func atk()
$monster = 0xE64A00
;0x94514E
;0xB2A6C5
; $aa = 0x8E4C52
;0x1A2840

$le = PixelSearch(363, 365, 1120, 755, $monster ,10)
If Not @error Then
ToolTip('111111', 0, 0)
MouseMove($le[0], $le[1])
Sleep(250)
MouseClick("left",$le[0], $le[1],1)
ToolTip('กำลังโจมตี', 0, 0)
Sleep(350)
AdlibUnRegister("atk")
Sleep(350)
AdlibRegister("Mon", 100)
EndIf

EndFunc

klenium
มือใหม่เพิ่งสมัคร
มือใหม่เพิ่งสมัคร


จำนวนข้อความ : 4
ความนิยม : 0
เข้าร่วมเมื่อ : 16/02/2013

Re: ชี้แนะสคริปต์+การหาค่าสีทีครับ

ตั้งหัวข้อ by klenium on 07/03/13, 06:41 pm

คุณ flapjack ผมใส่codeผิดตำแหน่งรึเปล่า พอผมลองรันใหม่อีกรอบกลายเป็นว่า มันรอตามหน่วงเวลา(2วิ)แล้วมันไปคลิกตีตัวอื่นที่อยู่ใกล้ๆกันครับ ทำให้มอนมันรุมตาย

Code:
Func SearchMon()
Sleep(100)
For $i = 0 To UBound($monster)-1
    $coord = PixelSearch( 310,185,746,539, $monster[$i] )
    If IsArray($coord) Then

        ConsoleWrite(_GetTodaysDate() & 'Atkmon at' & $coord[0]&'x' & $coord[1] & @error & @crlf)
MouseClick("",$coord[0] , $coord[1],2,0) ;สั่งกดมอน
Sleep(100)
EndIf
Next
While PixelGetColor(แกน x,แกน y) = 0x732626

WEnd
EndFunc

คุณ loveapple244 ขอบคุณสำหรับโคดครับ
ผมไม่ได้เก่งหรอกครับ อ่านในblog ทั้ง8บทของคุณ pos แล้วก็อ่านจากในบอร์ดนี้ทั้งหมด เอามาปรับใช้เอง อะครับ (อาศัยพออ่านโคดพอเข้าใจบ้าง ดูในhelpของโปรแกรมมันบ้าง ก็พอคลำๆไปได้) em228
ยังไม่ได้ทำguiเลย กะว่าเอาให้มันเกือบสมบูรณ์ก่อนแล้วค่อยใส่gui อีกที

Fast
PSsix Member Super Class III
PSsix Member Super Class III

PSsix Program Coder
จำนวนข้อความ : 217
ความนิยม : 52
เข้าร่วมเมื่อ : 19/06/2011

Re: ชี้แนะสคริปต์+การหาค่าสีทีครับ

ตั้งหัวข้อ by Fast on 07/03/13, 07:40 pm

While PixelGetColor(แกน x,แกน y) = 0x732626
Sleep(1000) ;ใส่ด้วยท่าน
WEnd
avatar
flapjack
PSsix Member Super Class III
PSsix Member Super Class III

PSsix Moderator PSsix Master PSsix Game Coder
จำนวนข้อความ : 312
ความนิยม : 74
เข้าร่วมเมื่อ : 05/10/2010

Re: ชี้แนะสคริปต์+การหาค่าสีทีครับ

ตั้งหัวข้อ by flapjack on 08/03/13, 05:42 am

klenium พิมพ์ว่า:คุณ flapjack ผมใส่codeผิดตำแหน่งรึเปล่า พอผมลองรันใหม่อีกรอบกลายเป็นว่า มันรอตามหน่วงเวลา(2วิ)แล้วมันไปคลิกตีตัวอื่นที่อยู่ใกล้ๆกันครับ ทำให้มอนมันรุมตาย

Code:
Func SearchMon()
Sleep(100)
For $i = 0 To UBound($monster)-1
    $coord = PixelSearch( 310,185,746,539, $monster[$i] )
    If IsArray($coord) Then

        ConsoleWrite(_GetTodaysDate() & 'Atkmon at' & $coord[0]&'x' & $coord[1] & @error & @crlf)
MouseClick("",$coord[0] , $coord[1],2,0) ;สั่งกดมอน
Sleep(100)
EndIf
Next
While PixelGetColor(แกน x,แกน y) = 0x732626

WEnd
EndFunc

คุณ loveapple244 ขอบคุณสำหรับโคดครับ
ผมไม่ได้เก่งหรอกครับ อ่านในblog ทั้ง8บทของคุณ pos แล้วก็อ่านจากในบอร์ดนี้ทั้งหมด เอามาปรับใช้เอง อะครับ (อาศัยพออ่านโคดพอเข้าใจบ้าง ดูในhelpของโปรแกรมมันบ้าง ก็พอคลำๆไปได้) em228
ยังไม่ได้ทำguiเลย กะว่าเอาให้มันเกือบสมบูรณ์ก่อนแล้วค่อยใส่gui อีกที



จากโค๊ดด้านบน เพราะว่าในลูปถ้าเจอมอน 2 ตัว ในบริเวณที่หาค่าสีคำสั่งจะคลิกมอน ทั้ง 2 ตัวเลย
เลยเพิ่มคำสั่งนี้ไปเพื่อโจมตีทีล่ะ 1 ตัว ครับ

เพิ่มคำสั่งในลูปFor
Code:
ExitLoop
หลังจากคลิกโจมตีแล้ว


klenium
มือใหม่เพิ่งสมัคร
มือใหม่เพิ่งสมัคร


จำนวนข้อความ : 4
ความนิยม : 0
เข้าร่วมเมื่อ : 16/02/2013

Re: ชี้แนะสคริปต์+การหาค่าสีทีครับ

ตั้งหัวข้อ by klenium on 08/03/13, 08:48 pm

ขอบคุณทุกท่านมากครับ
ที่จริงไม่ต้องใส่ ExitLoop ก็ได้ครับ พบสาเหตุที่ทำให้ตีมอนตัวต่อไปแล้วครับ เพราะว่าตัวเกมมันเปลี่ยนสี ขอบเลือดมอนครับ ทำให้มันไปฟังชันถัดไปวนลูปตลอด
เลยทำให้ต้องเช็คและใส่ค่าขอบเลือดมอนใหม่ตลอดตอนเข้าเกม

    เวลาขณะนี้ 28/04/17, 05:16 pm