จากที่ได้ศึกษาจากบล็อคที่คุณ POS ได้เขียนไว้แต่ละบท รวมถึงได้อ่านกระทู้ ของคุณ AUT และอีกหลายๆท่านที่มาถก กันไว้ ทำให้ได้แนวทางในการเขียนสคลิปที่ชัดเจนมากครับ ต้องขอขอบคุณอีกครั้งครับ
ผมได้ลองทำสคลิปมาชุดหนึ่งเกี่ยวกับการหาค่าสี กดปุ่ม และคลิกเม้า ทดสอบแล้วก็ทำงานได้ดี แต่เป็นการเขียนแบบทีละ step ซึ่งผมดูแล้วมันเป็นการซ้ำซ้อนและค่อนข้างยาวมากๆ เลยจะขอแนวทางในการปรับปรุง สคลิปจากท่านผู้รู้ ช่วยแนะนำดังนี้ครับ
1. การปรับปรุง code ให้กระชับ
2. มีปัญหาเรื่องการหยุดหรือปิดโปรแกรมด้วย GUI แต่ปิดได้ด้วย Esc (hot key) เนื่องจากผมนำไปใช้กับเวทย์เพื่อบัพให้กับปาร์ตี้ ผมจึงเขียนให้รอรอบประมาณ T นาที
จาก code ด้านบน ผมลองแก้ส่วนของ Func A() โดย เพิ่ม $cood[8] =[377,398,419,440,461,482,503,524]
แล้วแก้ ฟังก์ชั่นเป็น
Func A()
For $R = 0 to 7
If PixelGetColor(681,$cood[$R],$GameHD) = 0x000000 Then
Send ("a")
sleep(1000)
MouseClick("",690,$cood[$R],1,1)
EndIf
If GUIGetMsg()= $Button2 Then ExitLoop
Next
sleep(3000)
EndFunc
แต่ส่วน Func B() ผมนำ checkbox มากำหนดเงื่อนไขการ buff ด้วยว่าจะเลือกสกิลไหนบ้าง เวลาจะใช้ For เพื่อทำงานวนลูป ไม่รุ้จะเขียนคำสั่งวนยังไงให้ เลื่อนการตรวจสถาณะ GUICtrlRead($Checkbox) ไปด้วย
และในตอนระหว่างทำงานใน function และช่วงเวลารอ sleep($t) ตามที่กำหนดเวลารอบบัพไว้ ถ้าต้องการหยุดด้วย botton 2 หรือ ปิด ด้วย gui ต้องเพิ่มส่วนไหนของสคลิปครับ(เจตนาคือหยุดการทำงานของโปรโดยไม่ต้องปิดด้วยปุ่ม 2 ) รบกวนขอคำแนะนำด้วยครับ
ผมได้ลองทำสคลิปมาชุดหนึ่งเกี่ยวกับการหาค่าสี กดปุ่ม และคลิกเม้า ทดสอบแล้วก็ทำงานได้ดี แต่เป็นการเขียนแบบทีละ step ซึ่งผมดูแล้วมันเป็นการซ้ำซ้อนและค่อนข้างยาวมากๆ เลยจะขอแนวทางในการปรับปรุง สคลิปจากท่านผู้รู้ ช่วยแนะนำดังนี้ครับ
1. การปรับปรุง code ให้กระชับ
2. มีปัญหาเรื่องการหยุดหรือปิดโปรแกรมด้วย GUI แต่ปิดได้ด้วย Esc (hot key) เนื่องจากผมนำไปใช้กับเวทย์เพื่อบัพให้กับปาร์ตี้ ผมจึงเขียนให้รอรอบประมาณ T นาที
- Code:
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
GUICtrlSetData($Button1, "ทำงาน")
$t = GUICtrlRead($input1)
sleep(3000)
While Sleep(100)
If GUIGetMsg() = -3 Then Exit
If GUICtrlRead($Checkbox20)=1 Then
A()
sleep(10)
EndIf
If GUICtrlRead($Checkbox0)=1 Then
B()
sleep(10)
EndIf
If GUIGetMsg()= $Button2 Then ExitLoop
If GUIGetMsg()= $GUI_EVENT_CLOSE Then Exit
sleep($t)
WEnd
Case $Button2
If GUICtrlRead($Button1) = "ทำงาน" Then
GUICtrlSetData($Button1, "เริ่ม")
sleep(1000)
EndIf
If GUIGetMsg()= $Button2 Then ExitLoop
If GUIGetMsg()= $GUI_EVENT_CLOSE Then Exit
EndSwitch
WEnd
Func A()
If PixelGetColor(681,377,$GameHD) = 0x000000 Then
Send ("a")
sleep(1000)
MouseClick("",690,377,1,1)
EndIf
If PixelGetColor(681,398,$GameHD) = 0x000000 Then
Send ("a")
sleep(1000)
MouseClick("",690,398,1,1)
EndIf
If PixelGetColor(681,419,$GameHD) = 0x000000 Then
Send ("a")
sleep(1000)
MouseClick("",690,419,1,1)
EndIf
If PixelGetColor(681,440,$GameHD) = 0x000000 Then
Send ("a")
sleep(1000)
MouseClick("",690,440,1,1)
EndIf
If PixelGetColor(681,461,$GameHD) = 0x000000 Then
Send ("a")
sleep(1000)
MouseClick("",690,461,1,1)
EndIf
sleep(3000)
If GUIGetMsg()= $GUI_EVENT_CLOSE Then Exit
EndFunc
Func B()
If GUICtrlRead($Checkbox1)=1 Then
Send("1")
sleep(300)
MouseClick("",690,377,1,1)
sleep(4000)
EndIf
If GUICtrlRead($Checkbox2)=1 Then
Send("2")
sleep(300)
MouseClick("",690,377,1,1)
sleep(4000)
EndIf
If GUICtrlRead($Checkbox3)=1 Then
Send("3")
sleep(300)
MouseClick("",690,377,1,1)
sleep(4000)
EndIf
If GUICtrlRead($Checkbox4)=1 Then
Send("4")
sleep(300)
MouseClick("",690,377,1,1)
sleep(4000)
EndIf
If GUIGetMsg()= $GUI_EVENT_CLOSE Then Exit
EndFunc
Func stop()
Exit
EndFunc
จาก code ด้านบน ผมลองแก้ส่วนของ Func A() โดย เพิ่ม $cood[8] =[377,398,419,440,461,482,503,524]
แล้วแก้ ฟังก์ชั่นเป็น
Func A()
For $R = 0 to 7
If PixelGetColor(681,$cood[$R],$GameHD) = 0x000000 Then
Send ("a")
sleep(1000)
MouseClick("",690,$cood[$R],1,1)
EndIf
If GUIGetMsg()= $Button2 Then ExitLoop
Next
sleep(3000)
EndFunc
แต่ส่วน Func B() ผมนำ checkbox มากำหนดเงื่อนไขการ buff ด้วยว่าจะเลือกสกิลไหนบ้าง เวลาจะใช้ For เพื่อทำงานวนลูป ไม่รุ้จะเขียนคำสั่งวนยังไงให้ เลื่อนการตรวจสถาณะ GUICtrlRead($Checkbox) ไปด้วย
และในตอนระหว่างทำงานใน function และช่วงเวลารอ sleep($t) ตามที่กำหนดเวลารอบบัพไว้ ถ้าต้องการหยุดด้วย botton 2 หรือ ปิด ด้วย gui ต้องเพิ่มส่วนไหนของสคลิปครับ(เจตนาคือหยุดการทำงานของโปรโดยไม่ต้องปิดด้วยปุ่ม 2 ) รบกวนขอคำแนะนำด้วยครับ