Jun 7, 2011
Tuesday, June 07, 2011

เขียนบอทเกมด้วย AutoIt : Bot 1 การสั่งกดคีย์ คลิกเม้าส์

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

AutoIt ใช้ทำบอทเกมแบบไหนได้บ้าง
    คำตอบต่อคำถามนี้คือ คุณสามารถทำบอทเกมได้ทุกเกม ทุกประเภท ไม่ว่าจะเป็นเกมออนไลน์ หรือเกมออฟไลน์ แต่ปัญหาที่ติดขัดเพียงอย่างเดียวสำหรับการทำบอทก็คือ ยิ่งเกมที่ต้องใช้การคิดมากเท่าไหร่การทำบอทยิ่งยากตามไปเท่านั้น เพราะทุกสิ่งที่คนคิดตอบโต้จะต้องแปลงมาเป็นคำสั่งทางภาษาสคริปต์ AutoIt ซึ่งในระดับการคิดที่ซับซ้อนจะต้องอาศัยความคิดเชิงคณิตศาสตร์มาช่วย (คุณเก่งคณิตศาสตร์หรือไม่)

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

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

#เตรียมพร้อมทำบอทด้วย AutoIt
    สำหรับสิ่งจำเป็นสำหรับในการทำบอทด้วย AutoIt นั้นมีดังนี้

- ชุดพัฒนาสคริปต์ AutoIt ดาวน์โหลดได้ที่ ไฟล์ติดตั้ง AutoIt และ SciTE เวอร์ชั่นล่าสุด

- มีความรู้พื้นฐานการใช้คำสั่งใน AutoIt , วิธีเชื่อมชุดคำสั่งที่เขียน เข้ากับหน้าต่างโปรแกรม (GUI) , เทคนิคการเขียนสคริปต์ และการคอมไพล์โปรแกรม (สร้างไฟล์ .exe เพื่อใช้งาน) โปรดหาอ่าน หนังสือ สำหรับการหัดเขียนสคริปต์ AutoIt เบื้องต้น (เนื้อหาในหนังสือส่วนใหญ่จะไม่นำมาลงในบล็อก เนื่องจากติดลิขสิทธิ์ทาง สนพ.)

- เกมเล็กๆ สักเกมเพื่อนำมาทดลองเขียนบอท (ควรหาเกมออฟไลน์จะใช้เป็นแนวทางง่ายกว่าออนไลน์)

เริ่มเขียนบอทด้วย AutoIt
    เกมตัวอย่างในการเขียนบอทของบทนี้ ผมจะเกม Zuma Deluxe เป็นเกมที่ยิงลูกแก้วสีที่มีสีเดียวกัน เพื่อให้เกิดความสะดวกผมจะแยกเป็นขั้นตอนย่อยดังนี้

# สคริปต์สำหรับควบคุมหน้าต่างเกม

    เปิดโปรแกรม AutoIt Window Info ขึ้นมา ตัวโปรแกรมจะอยู่ที่โฟลเดอร์ AutoIt ในสตาร์ทเมนู หรือจะเปิดจากเมนู Tools > Au3Info ในโปรแกรม SciTE Script Editor ก็ได้ (โปรแกรมจะอยู่ในโฟลเดอร์เดียวกับ AutoIt ในสตาร์มเมนู) แต่ต้องเปิดสคริปต์หรือสั่งเซฟสคริปต์ที่เขียนก่อนจึงจะเห็นเมนูนี้

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

1. เปิดโปรแกรม  AutoIt Window Info ขึ้นมา ลากสัญลักษณ์รูปเป้าที่กรอบ Finder Tool ไปวางบนหน้าต่างเกม

2. รายละเอียดของชื่อหน้าต่างเกมจะปรากฏขึ้นมาที่ส่วน Title



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


    หลังจากเขียนสคริปต์เสร็จทดลองรันโปรแกรมคลิกที่ปุ่ม F5 หากจะหยุดสคริปต์ในกรณีที่มีการทำงานต่อเนื่องไม่หยุดคลิกไปที่เมนู Tools > Stop Executing (หรือกดปุ่ม Ctlr + Break ที่คีย์บอร์ด)

Global $GameHD ;ประกาศตัวแปร $GameHD เพื่อนำไปใช้ทั้งเกม

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


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

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

#สคริปต์สำหรับสั่งกดปุ่มคีย์บอร์ด
    การสั่งกดปุ่มบนคีย์บอร์ดจะใช้สองคำสั่งหลักคือ Send และ ControlSend ความแตกต่างและวิธีใช้งานระหว่างสองคำสั่งคือ

[[*]] Send จะทำงานบนหน้าต่างที่คุณคลิกเลือก เช่น คุณสั่งกดปุ่ม A ระหว่างที่คลิกหน้าต่าง IE โปรแกรมก็จะกดปุ่ม A ที่โปรแกรม IE ตัวอย่างการใช้คำสั่ง เช่น

Send ("A") ;สั่งกดปุ่ม A

Send ("1") ;สั่งกดปุ่ม 1

หากคุณต้องการให้กดปุ่มเฉพาะหน้าต่างเกมเท่านั้น ก็เขียนคำสั่งเพิ่มเติมคือ

if WinActive ($GameHD) then Send ("A") ;สั่งกดปุ่ม A เมื่อมีการคลิกที่หน้าต่างเกมให้เท่านั้น

     จะเห็นว่ามีการอ้างอิงตัวแปร $GameHD  ที่ใช้ในตอนแรก เพื่อให้สคริปต์ตรวจดูว่ามีการคลิกที่หน้าต่างหรือไม่ การคลิกเลือกในที่นี้ คือคลิกหนึ่งครั้งให้หน้าต่างเกมมาอยู่บนสุดนะครับ (มีสถานะ Active) ถ้าระหว่างนั้นคุณไปคลิกที่หน้าต่างอื่นก็จะถือว่าสถานะ Active ของหน้าต่างเกมหมดไปโปรแกรมก็จะไม่กดปุ่ม มาดูอีกตัวอย่างหนึ่ง ผมจะสั่งให้กดปุ่ม 1 2 3 4 ไปเรื่อยๆ หากมีการคลิกที่หน้าต่างเกม เขียนได้ดังนี้

While 1 ;เริ่มการวนลูป
if WinActive ($GameHD) then Send ("1") ;สั่งกด 1 เมื่อคลิกหน้าต่างเกม
Sleep(1000) ;หน่วงเวลา 1 วินาทีก่อนกดปุ่มถัดไป
if WinActive ($GameHD) then Send ("2") ;สั่งกด 1 เมื่อคลิกหน้าต่างเกม
Sleep(1000) ;หน่วงเวลา 1 วินาทีก่อนกดปุ่มถัดไป
if WinActive ($GameHD) then Send ("3") ;สั่งกด 1 เมื่อคลิกหน้าต่างเกม
Sleep(1000) ;หน่วงเวลา 1 วินาทีก่อนกดปุ่มถัดไป
if WinActive ($GameHD) then Send ("4") ;สั่งกด 1 เมื่อคลิกหน้าต่างเกม
Sleep(1000) ;หน่วงเวลา 1 วินาทีก่อนกดปุ่มถัดไป
WEnd ;จบลูป

[[*]] ControlSend จะเป็นการบังคับส่งค่าการกดปุ่มไปยังหน้าต่างที่กำหนด ไม่ว่าจะคลิกเลือกที่หน้าต่างหรือไม่ก็ตาม  ตัวอย่างการใช้งานคำสั่งมีดังนี้

ControlSend($GameHD, "", "", "A") ;สั่งกดปุ่ม A

ControlSend($GameHD, "", "", "1") ;สั่งกดปุ่ม 1

สั่งให้กดปุ่ม 1 2 3 4 ไปเรื่อยๆ แบบไม่คลิกที่หน้าต่างเกม เขียนได้ดังนี้

While 1
    ControlSend($GameHD, "", "", "1") ;สั่งกดปุ่ม 1
    Sleep(1000) ;หน่วงเวลา 1 วินาที ก่อนกดปุ่มถัดไป
    ControlSend($GameHD, "", "", "2") ;สั่งกดปุ่ม 2
    Sleep(1000) ;หน่วงเวลา 1 วินาที ก่อนกดปุ่มถัดไป
    ControlSend($GameHD, "", "", "3") ;สั่งกดปุ่ม 3
    Sleep(1000) ;หน่วงเวลา 1 วินาที ก่อนกดปุ่มถัดไป
    ControlSend($GameHD, "", "", "4") ;สั่งกดปุ่ม 4
    Sleep(1000) ;หน่วงเวลา 1 วินาที ก่อนกดปุ่มถัดไป
    WEnd

     สำหรับการสั่งกดปุ่มอื่น อ่านวิธีการใส่รหัสปุ่มได้จาก http://pssix.blogspot.com/2010/11/pssix-autokey.html หรือสอบถามที่ฟอรั่มครับ

หมายเหตุ
คำสั่ง ControlSend อาจจะใช้กับบางเกมไม่ได้ (ใช้คำสั่ง Send แทน)

#สคริปต์สำหรับสั่งคลิกเม้าส์

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



เพื่อให้เข้าใจยิ่งขึ้นผมจะอธิบายเป็นลำดับขั้นดังนี้

1. ความละเอียดของหน้าจอคอมพิวเตอร์แต่ละเครื่องจะไม่เหมือนกัน ตามตัวอย่างนี้มีความละเอียด 1920 x 1080

2. ตำแหน่งเริ่มต้นของแกน x และ y จะอยู่ ณ จุดมุมบนซ้าย คือเริ่มต้นที่ตำแหน่งแกน x ที่พิกัด 0 และแกน y ที่พิกัด 0

3. ตำแหน่งสิ้นสุดที่หน้าจอตัวอย่างนี้ของแกน x จะอยู่ที่พิกัด 1919 แกน y จะอยู่ที่ 1079 ( – 1 เนื่องจากทั้งแกน X และ Y เริ่มต้นที่ 0)



     การวัดตำแหน่งแกนทั้งสองจะวัดแกน x จากมุมซ้ายสุดของหน้าจอไปยังขวาสุดของหน้าจอ และแกน y จะวัดจากบนสุดของหน้าจอไปยังล่างสุดของหน้าจอ ตำแหน่งพิกัดของเม้าส์ก็เกิดจากการนำเอาตำแหน่งแกน x ซึ่งบอกระยะแนวนอน และตำแหน่งแกน y ที่บอกระยะแนวตั้ง มารวมกันในจุดเดียว เช่น

คุณสั่งคลิกที่พิกัด x 500 และ y 300 ก็จะได้ตำแหน่งสีเขียวอันบน ในภาพจำลองด้านล่างนี้

อีกตัวอย่างคือ พิกัด x700 และ y500 ก็จะได้ตำแหน่งสีเขียวอันล่าง





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

1. เปิดโปรแกรม AutoIt Window Info ขึ้นมา คลิกไปที่แท็บ Mouse

2. ลากเป้าที่ Finder Tool ไปยังตำแหน่งที่ต้องการหาพิกัด

3. ตัวเลขแสดงตำแหน่งจะปรากฏขึ้นมาบนแถว Position ตามตัวอย่างนี้ผมลากเม้าส์ไปที่มุมซ้ายบนซึ่งเป็นจุดเริ่มต้นพิกัดก็จะได้ค่า 0 ทั้งแกน x และ y จากตรงนี้ผมขอให้คุณลองขยับเม้าสจากซ้ายไปขวาดู จะเห็นว่าตัวเลขที่แกน x เพิ่มขึ้นไปเรื่อยๆ (ตัวเลขแรกก่อนคอมม่า) และลองเปลี่ยนลากจากบนลงล่างจะเห็นว่าตัวเลขที่แกน y เพิ่มขึ้นเช่นกัน (ตัวเลขหลังคอมม่า)


     ทีนี้เลื่อนเป้าไปยังไอคอนหน้าจอสักอันหนึ่ง ปล่อยปุ่มเม้าส์ แล้วจดพิกัดที่ได้นั้นไว้ ตัวอย่างนี้ผมจะคลิกที่แกน x 300 และแกน y 420 คำสั่งสำหรับคลิกเม้าส์ตามพิกัดนี้จะใช้คำสั่ง MouseClick รูปแบบการใช้คำสั่งคือ

MouseClick ( "ชื่อปุ่มเม้าส์ที่จะให้คลิก" [,แกน x,แกน y [, จำนวนการคลิก [,ความเร็วในการขยับไปคลิก ]]] )


เมื่อนำคำสั่งดังกล่าวมาใช้กับพิกัดก็จะได้ตัวอย่างคำสั่งดังนี้

MouseClick("left",300,420,1,100)
;สั่งคลิกเม้าส์ซ้ายที่พิกัด 300,420, คลิก 1 ครั้ง ความเร็วขยับลูกศรเม้าส์ที่ 100 (ความเร็วช้าที่สุด)

ทีนี้ลองเปลี่ยนมาสั่งคลิกแบบเดิม แต่ขยับลูกศรเร็วขึ้นก็จะเขียนได้ดังนี้

MouseClick("left",300,420,1,10)

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

    ยังมีอีกคำสั่งหนึ่งสำหรับการคลิกเม้าส์คือคำสั่ง ControlClick คำสั่งดังกล่าวคล้ายคำสั่ง ControlSend คือสั่งคลิกไปยังหน้าต่างเกมแม้จะไม่ได้คลิกที่หน้าต่างนั้นก็ตาม วิธีการทำจึงเหมือนกันคือ ต้องใช้สคริปต์สำหรับควบคุมหน้าต่างเกมมาใช้ด้วย ดังตัวอย่างนี้ (ต้องใส่ไว้ด้านบนสุดก่อนใช้คำสั่ง ControlClick )

Global $GameHD

Func _PSsixLoadH($gtitle)
$GameHD = WinGetHandle($gtitle)
If @error Then
MsgBox(4096, "Error", "ไม่พบหน้าต่างเกม")
Else
Return 1
EndIf
EndFunc


If _PSsixLoadH("Zuma Deluxe") Then WinActivate($GameHD)

    เนื่องจากการใช้คำสั่ง ControlClick จะไม่เหมือนการสั่งคลิกเม้าส์ในหน้าจอปกติ คุณต้องตั้งค่า AutoIt Window Info ด้วยวิธีการนี้ทุกครั้งก่อนหาพิกัด

1. คลิกไปที่เมนู Options > Coord Mode > Client เพื่อปรับให้โปรแกรมหาตำแหน่งเฉพาะพื้นที่ในหน้าต่างเกม โดยจะวัดมุมซ้ายบนสุดของพื้นที่แสดงผลเกมเป็นพิกัด 0,0 แทนที่จะวัดจากมุมซ้ายบนสุดของหน้าจอ (พื้นที่หน้าต่างเกมในที่นี้หมายถึง พื้นที่แสดงผลเท่านั้น ไม่รวมไตเติลบาร์ของหน้าต่างเกม)



2. ลากเป้าใน Finder Tool ไปวางในตำแหน่งที่ต้องการสั่งคลิก จดพิกัดเอาไว้ หรือดับเบิลคลิกที่พิกัดก็ได้ โปรแกรมจะก็อปปี้ตำแหน่งให้อัตโนมัติ เวลานำไปใช้ก็กดปุ่ม Ctlr + V เพื่อวางในสคริปต์ได้เลย

3. นำพิกัดที่ได้ไปวางไว้ในคำสั่ง ControlClick  รูปแบบการใช้งานคำสั่งจะมีดังนี้

ControlClick (ชื่อไตเติลเกม,””,”” [,ชื่อปุ่มที่สั่งคลิก [,จำนวนการคลิก [,แกน x [,แกน y ]]]] )



    คำสั่ง ControlClick จะไม่มีคำสั่งสำหรับขยับลูกศรเม้าส์นะครับ เพราะจะเป็นการคลิกที่ไม่ต้องใช้เม้าส์ขยับไปคลิก  และโค้ดแบบเต็มสำหรับคำสั่งนี้คือ

Global $GameHD 

Func _PSsixLoadH($gtitle) 
$GameHD = WinGetHandle($gtitle)
If @error Then
MsgBox(4096, "Error", "ไม่พบหน้าต่างเกม") 
Else
Return 1
EndIf
EndFunc


If _PSsixLoadH("Zuma Deluxe") Then WinActivate($GameHD)

ControlClick ($GameHD, "", "","left",1,512,104)


รูปการนำพิกัดที่ได้มาใส่ในคำสั่ง  ControlClick




ส่งท้ายเรื่องการทำบอท

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

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


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

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

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

8 comments:

  1. มันสามารถใช้กับเกมส์ที่เล่นผ่านเวบบราวเซอร์ได้รึป่าวครับ

    ReplyDelete
  2. สุดยอดมากๆ ครับ ขอติดตามผลงานตลอดไปครับ

    ReplyDelete
  3. ขอบคุณครับ ลองทำโปรแกรมตั้งเวลาคลิก 2-3 พิกัด

    ReplyDelete
  4. This comment has been removed by the author.

    ReplyDelete
  5. This comment has been removed by the author.

    ReplyDelete
  6. ช่วยทหาวิธีทำบอทเกม HelloHero (เกมในเฟส+โทรศัพท์) หน่อยครับ มันซับซ้อนเกิน

    ReplyDelete
  7. ผมอยากทราบว่ามันมีคำสั่งอะไรบ้างอะครับ และก็แต่ละคำสั่งทำงานอยางไง (วิธีใช้ด้วยก็ดีนะครับ ^-^)

    ReplyDelete

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


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