Sep 8, 2011
Thursday, September 08, 2011

เขียนบอทเกมด้วย AutoIt : Bot 8 อ้างอิงพิกัดหน้าต่างเกมอย่างถูกต้อง

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

    หากคุณต้องการจะอ้างอิงที่หน้าต่างเกมเป็นหลัก ต้องเขียนคำสั่งตั้งค่าเพิ่มเข้ไาป 3 คำสั่ง โดยเพิ่มเข้าไปที่ส่วนหัว(บรรทัดบนสุด) ของสคริปต์ คือ

Opt("MouseCoordMode", 2) ;ตั้งค่าเม้าส์ ให้อ้างอิงพิกัดจากหน้าต่างโปรแกรม
Opt("PixelCoordMode", 2) ;ตั้งค่าการดึงรหัสสี ให้อ้างอิงพิกัดจากหน้าต่างโปรแกรม
Opt("CaretCoordMode", 2) ;ตั้งค่าการอ้างอิงหน้าต่าง สำหรับคำสั่งอื่นๆ ที่ต้องใช้พิกัดอ้างอิง


     สำหรับวิธีการตั้งโปรแกรม AutoIt Window Info และเขียนสคริปต์จะทำตามตัวอย่างดังนี้

1. เปิดโปรแกรม AutoIt Window Info ขึ้นมา คลิกไปที่เมนู Options > Coord Mode > Client

2. ที่โปรแกรม AutoIt Window Info คลิกที่เมนู Options > Magnify

3. คลิกแท็บ mouse เพื่อดู พิกัดและรหัสสี



4. ในตัวอย่างนี้ผมจะใช้โปรแกรม System Configuration เป็นตัวอย่างในการทำ การเปิดโปรแกรมนี้ทำได้ด้วย พิมพ์คำสั่ง msconfig ที่ RUN หรือ Search ในสตาร์ทเมนู

     เมื่อโปรแกรมเปิดขึ้นมาแล้ว ลากเป้าที่ Finder Tool ไปยังจุดที่คุณต้องการวัดพิกัดและดึงค่ารหัสสีออกมา ตามตัวอย่างนี้จะได้ค่าพิกัดคือ 38 x 71 และรหัสสีคือ 0x0F83C7




5. ผมจะเขียนสคริปต์สำหรับสั่งคลิกก่อน โดยจะอ้างอิงที่ไปหน้าต่างโปรแกรมก่อนทุกครั้ง (ดูรูปด้านล่าง)

6. ใส่พิกัดสำหรับคลิกลงในคำสั่ง MouseClick เมื่อเขียนเสร็จก็จะได้คำสั่งทั้งหมดดังนี้

     วิธีทดสอบการทำงาน ก็ลองขยับหน้าต่างโปรแกรม System Configuration ไปไว้ในตำแหน่งใดก็ได้บนหน้าจอ แล้วกด F5 ที่ SciTE เพื่อรันทดสอบคำสั่ง ถ้าถูกต้องจะเห็นว่าเม้าส์ขยับไปคลิกในตำแหน่งเดิมในหน้าต่าง System Configuration ทุกครั้ง แม้ว่าคุณจะขยับหน้าต่าง System Configuration ไปยังตำแหน่งอื่นก็ตาม




Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)
Opt("CaretCoordMode", 2)


If WinExists("System Configuration") Then WinActivate("System Configuration")
MouseClick("",38,71,1,0)

7. ต่อไปทดสอบการดึงเอารหัสสีในหน้าต่างโปรแกรมออกมา เขียนสคริปต์คำสั่งได้ดังนี้

    การทดสอบก็เพียงกด F5 รันสคริปต์ดู ลองขยับหน้าต่าง System Configuration  ย้ายไปที่ไหนก็ได้บนหน้าจอ (ต้องให้เห็นจุด ที่คุณจะดึงเอาค่าสีในหน้าต่างนั้นด้วย ไม่ใช่ลากไปซ่อนจนไม่เห็นหน้าต่าง) จะเห็นว่ารหัสสีที่ดึงออกมานั้นเป็นรหัสสีเดียวกันหมด แม้จะย้ายหน้าต่างไปตำแหน่งอื่นแล้วก็ตาม



Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)
Opt("CaretCoordMode", 2)


If WinExists("System Configuration") Then WinActivate("System Configuration")

for $i =1 to 10
$color = Hex(PixelGetColor(38,71),6)
    ConsoleWrite('+ดึงค่าสีรอบที่ ' & $i &' ได้ค่าสีคือ 0x' & $color & @crlf)
    Sleep(1000)
    Next

หมายเหตุ
    การอ้างอิงตำแหน่งหน้าต่างด้วยสคริปต์ข้างต้นนี้ต้อง อาศัยหน้าต่างที่มีการทำงาน โดยใช้คำสั่ง WinActivate("ชื่อหน้าต่าง") ก่อนทุกครั้ง แต่บางคำสั่งเช่น PixelGetColor ก็ไม่จำเป็นต้องสั่งให้หน้าต่างทำงาน แต่ต้องใส่ค่า handle อ้างอิงด้วย เช่น  PixelGetColor(38,71,$GameHD) ค่าตัวแปร $GameHD หามาได้อย่างไร โปรดกลับไปอ่านในบทที่ 1 หากขี้เกียจทำ หรือแค่จะทำโปรแกรมติดตั้งอัตโนมัติ ไม่ได้ทำบอทก็ไม่ต้องไปเสียเวลาอ่านครับ

หมายเหตุ 2
     เนื่องจากผู้อ่านบทความจำนวนหนึ่งเป็นพวก จับเสือมือเปล่า แนะนำหนังสือ AutoIt เบื้องต้น ในบทที่ 1 ไป ก็กลัวเปลืองเงินไม่ซื้อ  ทำให้ไม่รู้เรื่องพื้นฐานอะไรเลย บางคนแย่ไปกว่านั้นอ่านข้ามบททั้งที่ไม่เคยเขียนสคริปต์ AutoIt มาก่อน อาศัยก็อปตัดแปะสคริปต์ไปเรื่อย   ซึ่งก็ไม่เป็นไรครับ เราไม่ว่ากัน แต่ขอให้ช่วยมีความขยันอีกนิด พยายามอ่านบทความสอน AutoIt หน้าบล็อกนี้ให้หมด อย่าเห็นว่าเป็นบทความที่ไม่ได้ใช้ประโยชน์ หรือเป็นเรื่องที่คุณไม่ต้องการรู้ เนื่องจากการเขียนบทความต่างๆ ผมได้แทรกความรู้เรื่องคำสั่งสคริปต์ เกร็ดเล็กเกร็ดน้อย ซึ่งคำสั่งบางคำสั่งนั้น เมื่ออธิบายไปแล้วผมจะไม่เสียเวลามาอธิบายซ้ำในบทความอื่น เพราะเสียเวลาทั้งตัวผม และเสียเวลาของผู้ที่ตั้งใจเรียนรู้ จะให้อธิบายซ้ำเพื่อคนขี้เกียจไม่กี่คน ที่ขี้เกียจคลิกไปอ่านก็กระไรอยู่


###จบแล้วครับ###

2 comments:

  1. ตรงวิธีเขียนสคิปทำไงหลอ คับ คือจะให้ขึ้นหน้าต่างเขียนโปรแกรมอะ

    ReplyDelete
  2. โหลดตรงไหนหว่า

    ReplyDelete

    ส่วนนี้สำหรับแสดงความคิดเห็นทั่วไป สอบถามปัญหาตั้งถามได้ที่ฟอรั่ม


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