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


รบกวนสอบถาม แนวทางการย่อ สคลิป ด้วยครับ

Share
avatar
logo2007
สมาชิกทั่วไป
สมาชิกทั่วไป


จำนวนข้อความ : 13
ความนิยม : 1
เข้าร่วมเมื่อ : 20/06/2011

รบกวนสอบถาม แนวทางการย่อ สคลิป ด้วยครับ

ตั้งหัวข้อ by logo2007 on 21/06/12, 10:24 am

จากที่ได้ศึกษาจากบล็อคที่คุณ POS ได้เขียนไว้แต่ละบท รวมถึงได้อ่านกระทู้ ของคุณ AUT และอีกหลายๆท่านที่มาถก กันไว้ ทำให้ได้แนวทางในการเขียนสคลิปที่ชัดเจนมากครับ ต้องขอขอบคุณอีกครั้งครับ em218

ผมได้ลองทำสคลิปมาชุดหนึ่งเกี่ยวกับการหาค่าสี กดปุ่ม และคลิกเม้า ทดสอบแล้วก็ทำงานได้ดี แต่เป็นการเขียนแบบทีละ 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 ) รบกวนขอคำแนะนำด้วยครับ
avatar
aut
PSsix Powerful Scripting Class
PSsix Powerful Scripting Class

PSsix Game Coder
จำนวนข้อความ : 472
ความนิยม : 126
เข้าร่วมเมื่อ : 24/07/2010

Re: รบกวนสอบถาม แนวทางการย่อ สคลิป ด้วยครับ

ตั้งหัวข้อ by aut on 21/06/12, 12:11 pm

เอาไปดัดแปงเองนะนาย ชินจัง

#include
#include
#include
#include

AdlibRegister("b",100)
Global $GameHD
Global $exloop = 0
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 263, 156, 192, 124)
$Button1 = GUICtrlCreateButton("a", 24, 8, 75, 25)
$Button2 = GUICtrlCreateButton("พอ", 120, 8, 75, 25)
$Label1 = GUICtrlCreateLabel("Label1", 24, 56, 35, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

Case $Button1
$exloop =0
a()
EndSwitch
WEnd

Func a()
for $i = 1 to 10000
if $exloop =1 Then
GUICtrlSetData($Label1,"พอ")
ExitLoop
EndIf

Sleep(1000)
GUICtrlSetData($Label1,$i)
If PixelGetColor(681,222,$GameHD) = 0x000000 Then
Send ("a")
sleep(1000)
MouseClick("",690,222,1,1)
EndIf
Next
EndFunc



Func b()
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button2
$exloop =1
EndSwitch
EndFunc
avatar
logo2007
สมาชิกทั่วไป
สมาชิกทั่วไป


จำนวนข้อความ : 13
ความนิยม : 1
เข้าร่วมเมื่อ : 20/06/2011

Re: รบกวนสอบถาม แนวทางการย่อ สคลิป ด้วยครับ

ตั้งหัวข้อ by logo2007 on 21/06/12, 01:20 pm

ขอบคุณมากครับ คุณ aut ได้ละครับ ส่วนนี้สำคัญจริงๆ ไม่อย่างนั้น โปรแกรมจะดูเอ๋อๆไปเลย

    เวลาขณะนี้ 17/08/17, 04:59 pm