ฟอรั่ม PSsix

Would you like to react to this message? Create an account in a few clicks or log in to continue.

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


4 posters

    ปัญหา การ Error ของ AutoIt ครับ

    flapjack
    flapjack
    PSsix Member Super Class III
    PSsix Member Super Class III


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

    ปัญหา การ Error ของ AutoIt ครับ Empty ปัญหา การ Error ของ AutoIt ครับ

    ตั้งหัวข้อ by flapjack 07/11/10, 06:34 pm

    คือเวลา ใช้ไปนานๆ มันมักจะมีปัญหา Error อ่าครับ
    ไม่ทราบเป็นที่อะไรกันแน่ เพราะ ตอน compile ของสคริปแล้วก็ไม่มีอะไร


    [You must be registered and logged in to see this image.]



    ผู้รู้ช่วยตอบทีนะครับ
    POS
    POS
    PSsix
    PSsix


    ปัญหา การ Error ของ AutoIt ครับ Empty ปัญหา การ Error ของ AutoIt ครับ Empty ปัญหา การ Error ของ AutoIt ครับ Empty
    จำนวนข้อความ : 1152
    ความนิยม : 326
    เข้าร่วมเมื่อ : 19/07/2010

    ปัญหา การ Error ของ AutoIt ครับ Empty Re: ปัญหา การ Error ของ AutoIt ครับ

    ตั้งหัวข้อ by POS 07/11/10, 07:35 pm

    มีการใช้ลูปเรียกฟังก์ชันเดิมซ้ำๆ กันหลายครั้ง ทำให้เกิดการใช้พื้นที่หน่วยความจำเพิ่มขึ้นทุกครั้ง จนในที่สุดก็ถึงขีดจำกัด หน่วยความจำไม่พอครับ วิธีแก้ไขก็เขียนเลี่ยงการเรียกฟังก์ชั่นในลูป ใช้พวก if then else ซ้อนเข้าไปแทน

    Monaliza
    Monaliza
    PSsix Member Super Class III
    PSsix Member Super Class III


    PSsix Program Coder
    จำนวนข้อความ : 213
    ความนิยม : 7
    เข้าร่วมเมื่อ : 03/10/2010

    ปัญหา การ Error ของ AutoIt ครับ Empty Re: ปัญหา การ Error ของ AutoIt ครับ

    ตั้งหัวข้อ by Monaliza 07/11/10, 09:53 pm

    เป็นเหมือนกันครับปัญหานี่้สำหรับคนเขียนโปรแกรมผมถือว่าเป็นเรื่องใหญ่มากรบกวนคุณ pos ช่วยยกตัวอย่างโค้ดที่ผิดผลาดจนทำให้เกิดการ error เมื่อใช้ไปนานๆ เป็นความรู้หน่อยนะครับ ขอบคุณครับ รออ่าน เขียนโปรแกรมด้วย autoit ตอนที่3อยู่นะครับ
    flapjack
    flapjack
    PSsix Member Super Class III
    PSsix Member Super Class III


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

    ปัญหา การ Error ของ AutoIt ครับ Empty Re: ปัญหา การ Error ของ AutoIt ครับ

    ตั้งหัวข้อ by flapjack 08/11/10, 01:01 am

    POS พิมพ์ว่า:มีการใช้ลูปเรียกฟังก์ชันเดิมซ้ำๆ กันหลายครั้ง ทำให้เกิดการใช้พื้นที่หน่วยความจำเพิ่มขึ้นทุกครั้ง จนในที่สุดก็ถึงขีดจำกัด หน่วยความจำไม่พอครับ วิธีแก้ไขก็เขียนเลี่ยงการเรียกฟังก์ชั่นในลูป ใช้พวก if then else ซ้อนเข้าไปแทน


    แล้วพื้นที่หน่วยความจำมันอยู่ที่ไหนเหรอครับ :?:
    Monaliza
    Monaliza
    PSsix Member Super Class III
    PSsix Member Super Class III


    PSsix Program Coder
    จำนวนข้อความ : 213
    ความนิยม : 7
    เข้าร่วมเมื่อ : 03/10/2010

    ปัญหา การ Error ของ AutoIt ครับ Empty Re: ปัญหา การ Error ของ AutoIt ครับ

    ตั้งหัวข้อ by Monaliza 08/11/10, 05:20 am

    การใช้ sleep(10)ต่อการวนloop1รอบ จะทำให้ cpu ประมวลผลหนักเกินไปหรือเปล่าครับ ใช้สาเหตุที่ทำให้เกิดการerrorเมื่อใช้โปรแกรมไปนานๆเกี่ยวไหมครับ
    POS
    POS
    PSsix
    PSsix


    ปัญหา การ Error ของ AutoIt ครับ Empty ปัญหา การ Error ของ AutoIt ครับ Empty ปัญหา การ Error ของ AutoIt ครับ Empty
    จำนวนข้อความ : 1152
    ความนิยม : 326
    เข้าร่วมเมื่อ : 19/07/2010

    ปัญหา การ Error ของ AutoIt ครับ Empty Re: ปัญหา การ Error ของ AutoIt ครับ

    ตั้งหัวข้อ by POS 08/11/10, 07:59 am

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

    สรุปเอาแบบง่ายๆ ถ้าแก้ไขไม่เป็นก็เอาสคริปต์มาโฟส ผมจะดูให้ครับว่าต้องแก้ตรงส่วนไหน



    flapjack
    flapjack
    PSsix Member Super Class III
    PSsix Member Super Class III


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

    ปัญหา การ Error ของ AutoIt ครับ Empty Re: ปัญหา การ Error ของ AutoIt ครับ

    ตั้งหัวข้อ by flapjack 08/11/10, 08:32 pm

    ครับ นี้สคริปที่เขียนครับ
    Code:


    HotKeySet("{INSERT}","Auto")
    Hotkeyset("{END}","stop")
    Hotkeyset("{PAUSE}","Pause")
    Global $Paused


    if Not WinExists ("หน้าต่างโปรแกรม") then
    MsgBox(64, "หน้าต่างโปรแกรม", "You must be running ")
    Exit
    EndIf

    MsgBox(64, ".....", "To Start the Bot Press the Insert Key, and to stop press the End Key, and to pause Press the Pause key")
    pause()



    Func jai()
    WinActivate ('หน้าต่างโปรแกรม')
    Return
    EndFunc






    Func start()

       jai()
       Send("{TAB}")
       Sleep  (1000)
    attalk()

    EndFunc

    Func attalk()
    $Pixel = PixelGetColor(440,196)
    If $Pixel =0x102732Then


    Send ("{1}")
    Sleep(1000)


    HP()

    EndIf

    $Pixel = PixelGetColor(440,196)
    If  $Pixel =0x102732Then

    attalk()

    EndIf


    AI()


    EndFunc

    Func AI()
    Store()

     start()
    Return

    EndFunc


    Func Store()


    Send("{5}")
    Sleep (1000)

    Send("{5}")


    Return

    EndFunc

    Func HP()

       $Pixel = PixelGetColor(273,187)
    If  $Pixel =0x162834 Then
    Send("{7}")
    Sleep (2000)
       Return
       EndIf
       EndFunc

    Func Auto()
    ToolTip(": Skill Auto", 2, 0)
    Sleep (400)
    start()
    EndFunc



    Func Pause()
    $Paused = NOT $Paused
    While $Paused
    ToolTip(": Paused - Press Insert to start ", 2, 0)
    Sleep (100)
    WEnd
    EndFunc


    Func stop()
    ToolTip(": Shutting Down ", 2, 0)



    สื่งที่เขียนเอาไว้(แบบคร่าวๆ)
    - เมื่อเจอหน้าต่างของโปรแกรม
    - ให้กด insertเพื่อเริ่มการทำงาน ก็จะเริ่ม Func start
    - เมื่อไป Func start ให้ไปที่ Func jai เจอ หน้าต่างของโปรแกรม แล้วกลับมาที่ Func start
    - กด TAB รอ อีก 1 วินาที ไปที่ Func attalk
    - เมื่อไป ถึง Func attalk ถ้าเจอสีตามที่กำหนด เอาไว้ให้ ทำงานต่อ
    - กด 1 รออีก 1 วินาที ข้ามไปที่ Func HP
    - เมื่อไปถึง Func HP ถ้าเจอ สีกำหนดเอาไว้ ให้ 7 แล้ว รอ 2วินาที แล้ว กลับไปที่ Func attalk
    - เมื่อถ้าเจอสีกำหนด ให้ไปที่ Func attalk แต่ถ้าไม่เจอ ให้ไป Func AI
    - เมื่อไปถึง Func AI ให้ไป Func Store ให้กด 5 กลับไปที่ Func เดิม
    - แล้วไปที่ Func start (วน)
    ***********************************
    จากบทความข้างต้น
    สิ่งที่เขียนไปบ้างคนอาจจะรู้แล้วเหมือน.... อะไร AI นั้นเองครับ (ใช่หรือเปล่า)
    ***********************************
    สิ่งที่อยากพัฒนาต่อ(ถ้าใครพอทราบช่วยบอกที่นะครับ)
    - ให้ทำงานโดย ไม่ต้องแสดง ตัวโปรแกรม
    - ดึงขอมูล แถบ Hp และ MP ซึ้งมีกระทู้ นี้แล้ว (ผู้รู้ที่ทำได้แล้วช่วยบอกด้วยนะครับ)http://pssix.forumotion.com/forum-f2/topic-t43.htm

    ************************************
    ขอบคุณมากครับกับ สคริป ต้นฉบับ jaimodify

    aut
    aut
    PSsix Powerful Scripting Class
    PSsix Powerful Scripting Class


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

    ปัญหา การ Error ของ AutoIt ครับ Empty Re: ปัญหา การ Error ของ AutoIt ครับ

    ตั้งหัวข้อ by aut 09/11/10, 08:00 am

    ดูแล้วมึนจริงๆ ตัวอย่าง


    Func HP()
    $Pixel = PixelGetColor(273,187)
    If $Pixel =0x162834 Then
    Send("{7}")
    Sleep (2000) << หยุดสองวิ ตอนหยุดเกิดโดนตีขึ้นมาก็ไม่ทำอะไรเลยอะดิ
    Return << สั่งให้ย้อนกลับไปทำไม เอาออกก็ได้ จบ endif มันก็ย้อนกลับไปที่เดิมอยู่ดี สั่งย้อนกลับเหมือนตัวนี้ยังทำงานอยู่ นี่ตัวต้นเหตุเลยอะ
    EndIf
    EndFunc


    flapjack
    flapjack
    PSsix Member Super Class III
    PSsix Member Super Class III


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

    ปัญหา การ Error ของ AutoIt ครับ Empty Re: ปัญหา การ Error ของ AutoIt ครับ

    ตั้งหัวข้อ by flapjack 09/11/10, 11:27 pm

    aut พิมพ์ว่า:ดูแล้วมึนจริงๆ ตัวอย่าง


    Func HP()
    $Pixel = PixelGetColor(273,187)
    If $Pixel =0x162834 Then
    Send("{7}")
    Sleep (2000) << หยุดสองวิ ตอนหยุดเกิดโดนตีขึ้นมาก็ไม่ทำอะไรเลยอะดิ
    Return << สั่งให้ย้อนกลับไปทำไม เอาออกก็ได้ จบ endif มันก็ย้อนกลับไปที่เดิมอยู่ดี สั่งย้อนกลับเหมือนตัวนี้ยังทำงานอยู่ นี่ตัวต้นเหตุเลยอะ
    EndIf
    EndFunc


    แหะๆ ผมมีความรู้แค่ความรู้แบบ งูๆๆปลาๆ ละครับ ^^''
    แต่ผมลอง ลบ ตัว Return ดูแล้วนะครับ ใช้ไปนานๆ ก็ยัง Error นะครับ (หยุดไปเฉยๆ)

    POS
    POS
    PSsix
    PSsix


    ปัญหา การ Error ของ AutoIt ครับ Empty ปัญหา การ Error ของ AutoIt ครับ Empty ปัญหา การ Error ของ AutoIt ครับ Empty
    จำนวนข้อความ : 1152
    ความนิยม : 326
    เข้าร่วมเมื่อ : 19/07/2010

    ปัญหา การ Error ของ AutoIt ครับ Empty Re: ปัญหา การ Error ของ AutoIt ครับ

    ตั้งหัวข้อ by POS 10/11/10, 02:17 am

    แก้ไขคำสั่งอย่าให้มีการเรียกฟังก์ชันในฟังก์ชัน เขียนแบบนี้ครับ อยากเพิ่มฟังก์ชันหรืออย่างอื่นก็ใส่เรียงลงมา


    Code:
        if WinExists("ชื่อเกมส์") Then WinActivate ("ชื่อเกมส์")

    While 1
        If WinActive("ชื่อเกมส์") Then
       
    A();ฟังก์ชันทำงานเรียงลำดับ
    B();ฟังก์ชันทำงานเรียงลำดับ
    C();ฟังก์ชันทำงานเรียงลำดับ
          
          
    Else
       Sleep(100)
    EndIf   
        WEnd
       
       
        Func A()
           Sleep(10)
           ;ใส่คำสั่ง
        EndFunc
       
        Func B()
           Sleep(10)
           ;ใส่คำสั่ง      
        EndFunc
       
       
        Func B()
           Sleep(10)
           ;ใส่คำสั่ง
          
        EndFunc
       
    flapjack
    flapjack
    PSsix Member Super Class III
    PSsix Member Super Class III


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

    ปัญหา การ Error ของ AutoIt ครับ Empty Re: ปัญหา การ Error ของ AutoIt ครับ

    ตั้งหัวข้อ by flapjack 11/11/10, 09:05 pm

    POS พิมพ์ว่า:แก้ไขคำสั่งอย่าให้มีการเรียกฟังก์ชันในฟังก์ชัน เขียนแบบนี้ครับ อยากเพิ่มฟังก์ชันหรืออย่างอื่นก็ใส่เรียงลงมา


    Code:
        if WinExists("ชื่อเกมส์") Then WinActivate ("ชื่อเกมส์")

    While 1
        If WinActive("ชื่อเกมส์") Then
       
    A();ฟังก์ชันทำงานเรียงลำดับ
    B();ฟังก์ชันทำงานเรียงลำดับ
    C();ฟังก์ชันทำงานเรียงลำดับ
          
          
    Else
       Sleep(100)
    EndIf   
        WEnd
       
       
        Func A()
           Sleep(10)
           ;ใส่คำสั่ง
        EndFunc
       
        Func B()
           Sleep(10)
           ;ใส่คำสั่ง      
        EndFunc
       
       
        Func B()
           Sleep(10)
           ;ใส่คำสั่ง
          
        EndFunc
       

    ขอบคุณมากครับสำหรับแบบสคริป ที่จะเขียน :cheers:
    *****************************
    แต่ตอนนี้ผมติดปัญหาอ่าครับ :(
    - ไม่สามารถ ดึง การวนลูปออกมาได้ครับ (มันวนอยู่ใน Func)
    ลองดูใน code นะครับ
    Code:


    Func attalk()


    $Pixel = PixelGetColor(440,196)
    If $Pixel =0x102732Then

    While  $Pixel

    Send ("{1}")
    Sleep(1000)



    WEnd
    EndIf
    EndFunc

    - จากสคริป แล้ว ผมให้มันเจอแถบสีนี้ ให้ตรวจสอบ การวนของตัวแปร $Pixel ด้วย และกด 1 กับ รอ1 วิ
    แต่พอแถบสีหายไป มันกลับไม่ทำคำสั่งต่อไป (วนลูป) ทั้งๆที่ผมให้มัน ตรวจสอบ ตัวแปร $Pixel
    แทนที่จะวนลูปจะหายไปแล้วไปคำสั่ง มันเป็นเพราะอะไรเหรอครับ :?:
    aut
    aut
    PSsix Powerful Scripting Class
    PSsix Powerful Scripting Class


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

    ปัญหา การ Error ของ AutoIt ครับ Empty Re: ปัญหา การ Error ของ AutoIt ครับ

    ตั้งหัวข้อ by aut 11/11/10, 09:44 pm

    ไม่ชัวนะ ลองเอาไปแก้ดูตามนี้ :affraid:

    นายลองเปลี่ยน

    While $Pixel

    เป็น

    While PixelGetColor(440,196) = 0x102732


    flapjack
    flapjack
    PSsix Member Super Class III
    PSsix Member Super Class III


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

    ปัญหา การ Error ของ AutoIt ครับ Empty Re: ปัญหา การ Error ของ AutoIt ครับ

    ตั้งหัวข้อ by flapjack 11/11/10, 10:05 pm

    aut พิมพ์ว่า:ไม่ชัวนะ ลองเอาไปแก้ดูตามนี้ :affraid:

    นายลองเปลี่ยน

    While $Pixel

    เป็น

    While PixelGetColor(440,196) = 0x102732


    ขอบคุณมากๆ เลยครับ :cheers:
    ตอนนี้ได้ละ :P

      เวลาขณะนี้ 27/04/24, 12:04 pm