+ Reply to Thread
Page 1 of 2 12 LastLast
Results 1 to 10 of 18
  1. #1
    Senior Member
    Join Date
    Jul 2011
    Posts
    83

    เริ่มต้น Jass By Nasnet



    คำนำ
    เอาละผมก็ไปนั่งเขียน วิธีการเขียน UDK มาสักพักเห็น jass เดือดร้อนก็เลยเผื่อมีคนมาสนใจ jass เฮ้ยมันดีกว่ายังไง

    แรกๆ ก็แบบนี้แหล่ะครับ ที่ดีกว่าคือ variables ที่สามารถ ยัดไปใน event ได้ ดัดได้ดีกว่าและ ความลึกของมัน มีบางคนที่ไม่รู้ว่า jass มันเร็วกว่าตรงที่มันไม่อ้อมไป function แต่มันเข้า native โดยตรงได้เลย

    นั่นแหล่ะคือข้อได้เปรียบและความเร็ว

    GUI ส่วนที่ดีคือ รวดเร็วในการขึ้นรูปแบบ command ของ code โดยเบื้องหลังมันก็คือ convert to jass นั่นแหล่ะครับ แต่ blizzard สร้างมาเพื่อเผื่อคนใช้งานชอบทางนี้
    ซึ่งถ้าถือว่าความยืดหยุน อยู่ในขั้นปานกลาง ถ้าเป็น map project ใหญ่ๆสร้างง่ายจริงในบางเรื่องถ้า ระดับชั้นของเทคนิคลึกมากๆ คงไม่สามารถสร้างได้ และ ถึงจะ block leak ก็ยัง lag ได้เหมือนกันและไม่สเถียร เพราะว่า GUI นั้นไม่ได้ตอบสนองกับ native โดยตรงแต่อ้อมไปโดย GUI จะมี function คอยรองรับ ถึงจะไปอีก method นึงครับ

    ถ้าคนใช้เป็น vjass กับ gui ใช้กันผสมผสานได้อย่าง สอดคล้องและ ง่ายต่อการใช้งานมากๆ และไม่จำเป็นต้องง้อ variables ใน GUI ก็ได้

    ส่วน jass,vjass,cjass เพียวๆ ก็ถือว่าดี มีอิสระมากที่สุดในการทำงาน เข้าถึง code ที่ GUI มิอาจ เข้าถึงมันได้ ข้อเสีย แทบไม่มีเลย ยกเว้น สำหรับมือเริ่มต้น


    ส่วนใครที่คิด จะเรียนเขียนโปรแกรม jass เป็นอีกตัวนึง ที่ถ้าเขียนเป็นก็รู้หลัก เหมือนกัน โดยยิ่งเรียน vb6 ละก็ event กับ action จะเนียนและเหมือนสุดๆ

    การที่จะให้ GUI เข้าถึง jass ได้มีอยู่ทางเดียว คือ custom script
    เนื้อหาทั้งหมดนี้จะเป็นการเขียน jass เบื้องต้นเพื่อให้เข้าใจ ภาษา jass ที่ทาง blizzard ได้สร้างมาเพื่อใช้งานกับ

    Game warcraft เพื่อให้เราสร้าง mod หรือ map ได้ และส่งเสริม idea ซึ่ง Editor ตัวนี้ ถือว่าสร้าง Mod หรือ map

    ง่ายที่สุดแล้ว


    เริ่มเขียนก่อนอื่นก็ จะเริ่มทดสอบ เดี๋ยวผมจะ Edit ไปเลื่อยๆ

    แนะนำให้ load Editor ตัวนี้ไปใช้งาน คลิก Download

    ส่วนประกอบ Jass

    Variable

    ตัวแปร (variable) คือชื่อที่ผู้เขียนโปรแกรมตั้งขึ้น เพื่อใช้เก็บค่าที่ต้องการนำมาใช้งานในการเขียนโปรแกรม เพื่อทำการประมวลผลข้อมูล โดยมีกฏในการตั้งชื่อตัวแปรดังนี้

    1.ต้องขึ้นต้นด้วยตัวอักษร ตัวต่อไปอาจจะเป็นตัวอักษรหรือตัวเลขก็ได้

    2.ห้ามใช้สัญลักษณ์อื่นใด ยกเว้นเครื่องหมายสตริงก์ ($) และขีดล่าง (Underscore)

    3.ตัวแปรอักษรภาษาอังกฤษตัวพิมพ์เล็กและตัวพิมพ์ใหญ่มีความหมายแตกต่างกัน

    4.ห้ามเว้นวรรคระหว่างตัวแปร

    5.ห้ามตั้งชื่อซ้ำกับคำสงวนในภาษา jass เช่น integer,real,local หรือ globals และ ฯลฯ ถ้าจะตั้ง คำสงวนจริงๆให้เขียน >> _ชื่อ << ต่อท้ายครับ เช่น real_a

    ก่อนที่จะนำตัวแปรไปใช้งาน ในภาษา jass จะต้องมีการประกาศค่าตัวแปรให้สอดคล้องกับข้อมูลที่จะนำไปใช้โดยมีรูปแบบดังนี้
    real ค่าตัวเลขที่มีทศนิยมได้
    integer ค่าตัวเลขจำนวนเต็ม
    string รูปลักษณะลายอักษร
    unit ซึ่งเป็นตัวแปร ของ Unit ภายในเกม

    เอาคราวๆแค่นี้ก่อน

    variable name
    ชื่อของตัวแปร ถ้ามีมากกว่า 1 ตัวให้ใช้เครื่องหมายคอมม่าคั่น

    *local จะประกาศใน function หรือ ของที่กำหนดให้เป็น globals เท่านั้น
    local integer a; คือ ประกาศ ตัว a เป็น integer

    public กับ private
    ข้อแตกต่างคือ

    private คือความเป็นส่วนตัวนั่นก็หมายความว่า private ค่าตัวแปล จะใช้ได้เฉพาะ library หรือ trigger ที่ประกาศ ไม่สามารถโยนข้าม Trigger ได้แต่จะ สามารถ ประกาศซ้ำ trigger อื่นได้

    public คือ สามารถ ดึงใช้ข้าม Trigger แต่ข้อเสีย ไม่สามารถ ประกาศซ้ำ trigger อื่นได้ยกเว้น อยู่ใน library ครับ

    Operator

    เรามาดูว่ามีอะไร บ้าง

    'เลขหรือ id unit' คือ สร้างค่า integer
    "ข้อความ" คือ ค่า string นั่นเอง
    == เท่ากับ
    = เท่ากับ (เช่น a คือ string b คือ string แต่ b มี ค่าข้างในคือ "ทดสอบ" ถ้าจะให้ a เหมือน b ก็ต้องใช้ set a=b แล้ว a ก็จะมีค่าข้างในเหมือน b)
    >= มากกว่าหรือเท่ากับ
    > มากกว่า
    <= น้อยกว่าหรือเท่ากับ
    < น้อยกว่า
    != ไม่ทับกับ
    <> ไม่เท่ากับ

    วิธีเขียน Jass ( how to write Jass )

    1 . ให้จ้องเอาไว้ครับ
    2 . สร้าง Trigger ครับ
    3 . จะได้ Trigger ดั่งรูป แต่ภาพนี้ผมจะทำการ rename หรือเปลี่ยนชื่อนั่นแหล่ะ
    4 . แล้วก็กดให้เป็นสีน้ำเงินครับ นั่นมันจะเป็นการ เลือก Trigger ครับ
    5 . กด Edit
    6 .

    ก็จะได้หน้าต่าง แบบนี้



    เริ่มต้นโดย vJass ผสม GUI

    * ต้อง Download Editor ข้างบนถึงจะเขียน vjass ได้นะครับ

    ก่อนอื่นผมจะลบ code ทั้งหมดใน Trigger Test

    มาเรามาทำความรู้จัก กับ Library ก่อน Library ก็เหมือน Class แต่ว่า Class คืออะไรล่ะ

    Class คือโครงสร้างเชิงวัตถุ ซึ่ง ก็จะให้เปรียบ ก็ เหมือน Class เป็นกล่องใส่ดินส่อ

    ซึ่ง method ก็เหมือน ทำหน้าที่เหมือนดินสอสี ที่คอยบ่งบอกว่า ดินสอสี นี้เวลาเขียน จะออกสีอะไร

    method คือ พวก function ซึ่งขอ อุปไว้ตรงนี้ก่อนเพราะว่า method ตีไปได้หลายอย่างครับ

    ม๊ะ!!.. เข้าเรื่อง



    ซึ่ง ผมตั้งชื่อ library ชื่อว่า Testa



    public function msgbox takes string message returns nothing

    public คือ อย่างที่ผมบอกไป นั่นแหละข้างบน

    function คือ การประกาศว่าไอนี่แหละคือ method หรือว่า โครงสร้าง ดินสอนั่นแหล่ะ ในนี้ผมจะตั้งชื่อ function นี้ว่า msgbox

    takes นั่น คือจะกระทำการ ใส่ parameter นั่นแหล่ะ เดี๋ยวเรามาเจาะ เรื่องนี้อีกที

    parameter ตัวแรกเป็น String ชื่อว่า message

    returns จะเป็นการคืนค่า

    การ Return นั้นจะ return ค่าได้แค่ตัวเดียว นอกจากท่านจะทำเป็น array ถึงจะสามารถ คืนค่าได้หลายๆ ค่าพร้อมกันๆ



    *การเรียก function ดิบๆทุกครั้งจะต้องใช้ call มาอยู่หน้าด้วยดังภาพข้างบน

    DisplayTextToForce( GetPlayersAll() , message )

    ตัวนี้ผมดึง function ที่มีอยู่ใน wc3 อยู่แล้ว ชื่อว่า DisplayTextToForce

    GetPlayersAll เป็น function ที่เรียกผู้เล่นทั้งหมด

    message ก็คือ parameter ตัวแรกเป็น String ชื่อว่า message ครับ หรือ



    ครับซึ่ง function นี้ที่ผมเลือกใช้จะ ประกาศ ข้อความ ให้ player ทั้งหมดได้รับทราบ

    เรามาต่อกันดีกว่า สร้าง Trigger มาใหม่





    call Testa_msgbox("test")

    call คือการเรียก

    Testa คือชื่อ library
    msgbox คือ function

    ถ้าประกาศ แบบไม่มี Initially ให้ประกาศ แบบข้างบน นะครับ

    ใส่ parameter ตัวแรกลงไป ตัวนี้กำหนดเป็น string
    จะใช้ "ข้อความ"

    OK แล้วทดสอบรัน



    จะได้ดังภาพ

    Source Code = http://www.mediafire.com/?m4pmdx9x125o9td

    เริ่มต้นโดย vJass ผสม GUI (การใช้งาน returns)



    ก่อนอื่นก็สร้าง function ตามผม



    สังเกตุ ถ้า returns ตัวเนีย เวลา เรากำหนด return ใน method

    ถ้า return เป็น string ก็ กำหนด returns ให้เป็น string ถ้าเป็น real เป็น real

    สรุป คือ return ค่านั้นจะคืนค่า type variable อะไรก็ชั่งก็ต้องเปลี่ยน ก็ต้องให้ตรงกับ returns ของ method ด้วย

    เช่น



    มาเข้าเรื่องกันต่อ

    ผมยังจะใช้ตัวนี้ต่อ



    จากนั้นมาสร้าง variables ชื่อว่า abc



    จากนั้น ผมก็สร้าง custom script มาอีก 1



    จะเห็นว่า function test ที่ผมสร้าง คือ parameter คือ message แล้วผมก็คืนค่า message กลับมา

    ดังนั้น function test จะมีค่า คือ test111 ตามที่ผมพิมพ์


    แต่ ถ้า ผมกำหนดข้างใน function มันเป็น
    local string a= "tessssss"
    return a
    ดังนั้น function test ก็จะมีค่า tessssss โดยปริยาย


    ดังนั้น udg_abc ถ้าประกาศ ใน variables ของ GUI จะต้องมี udg ทุกครั้งไม่ว่า unit ใน map ก็จะเป็น udg ด้วย
    แต่ถ้า unit ที่สร้างขึ้นโดย ไม่ได้เอาไปวางใน หน้าออกแบบ จะสามารถ ตั้งชื่อมันได้

    udg_abc = Testa_test("test1111")
    udg_abc ก็จะกลายเป็น test1111
    แล้ว ผมก็เอาไป ประกาศ ที่ผม สร้าง function msgbox ก่อนหน้านี้ไว้แล้ว
    ทดสอบการ รัน
    ผลลัพธุ์



    source code = http://www.mediafire.com/?zb92cx0iujlhblb


    มาเริ่ม Jass เพียว


    เดี๋ยวเรามาเรียนรู้ ส่วนต่างๆ องค์ ประกอบของ ของ Jass กันก่อน

    Jass ก็มีเหมือน GUI

    จะมี
    Event
    Condition
    Action

    เรามา เข้าใจกันลึกๆ กันก่อนว่า



    Event คือ เหตุการณ์ เช่น สมมุติว่า เราคลิก click hero หรือ hero player 1 ตาย หรือ เกิด เป็นต้น นั่นก็หมายความว่า Trigger ตัวนั้นจะเริ่มทำงาน ผ่านไป Condition จริงๆ แล้ว

    Condition ก็คือเงื่อนไขแหล่ะครับ ถ้า event โผล่มา แล้วตรวจสอบว่า ตรงกับเงื่อนไขที่เรา ระบุบ ไว้หรือเปล่า ถ้าไม่ตรง Trigger นั้นก็จะ ปล่อยหรือ คลายไม่ทำงานต่อ

    จนกว่า จะมาโดน event อีกรอบ นั่นเอง ซึ่งถ้า ผ่าน condition ก็จะไป action action ก็ เป็นการดำเนิน การของ function โดย ใน GUI จะเป็นการ ทำงานแบบเรียงลำดับ แต่ Jass นั้น

    ก็เหมือน GUI นั่นแหล่ะครับ แต่ jass จะคลุมอยู่ใน function เดียว

    เรามาเริ่ม ขั้นแรกเลยดีกว่า

    ผมจะสร้าง Trigger และ Convert to text แล้วลบ ออกให้ผม ชื่อ Trigger ผมชื่อว่า Testjass



    ผมจะสร้าง function หลักที่ Trigger จะทำงาน นะครับ

    ก่อนอื่น

    function InitTrig_Testjass takes nothing returns nothing


    endfunction

    ซึ่ง main หลักของ function ตัวนี้ จะไม่สามารถ ทำ parameter กับ return ได้ครับ

    function InitTrig_Testjass takes nothing returns nothing
    set gg_trg_Testjass = CreateTrigger() // เป็นการบ่งชี้ว่า Trigger นี้ถูกสร้างและ ชื่อ Trigger อะไร ประมาณนั้น ซึ่ง gg_trg_ จะ lock เลยแล้วส่วนด้านท้าย gg_trg_ ก็จะเป็นชื่อ Trigger โดยถ้าเปลี่ยนเป็นอย่างอื่น error ครับ เพราะ Trigger ก็คือ variables ชนิดหนึ่งเหมือนกัน แต่ถ้าไม่ชอบใช้แบบนี้ก็ local trigger test = CreateTrigger() ก็ได้

    endfunction

    จากส่วน ส่วนประกอบก็จะมี

    Event
    Condtion
    Actions

    Evnet นั้นจะหา function มันจากไหน ก็จะมี



    ผมเลยถึง แนะนำให้ใช้ Jass New Gen ไงครับ

    จากนั้นจะเห็น textbox อยู่ด้านซ้ายมือให้พิมพ์ไป TriggerRegister

    ก็จะมี event ออกมาบานตะไท เลยทีเดียว

    ที่สำคัญ คู่พระนาง

    มันคือตัวสำคัญ ของ main หลักเลยทีเดียว

    TriggerAddCondition คือการจะเพิ่ม ให้มี Condition หรือ ใน GUI ก็ไอรูปนี้
    และที่ขาดไปเลยไม่ได้คือ
    TriggerAddActions คือการเพิ่ม action นั่นแหละ โดยสองตัวนี้ จะใช้การ เชื่อมไป function ที่คุณจะระบุบว่า ให้เข้าไปทำงาน function ไหน นั่นแหละ

    โดยแต่ละตัวก็มีข้อสงวน ต่างกัน ทั้งสองตัวนี้ คุณจะใส่ก็ได้ไม่ใส่ก็ได้ ถ้าไม่ใส่ ก็จะเหมือนในรูปนี้

    คือมันว่างนั่นเอง คราวนี้เรามาดูตัวอย่าง และ การสงวน ของมันกันเลยดีกว่า

    TriggerAddCondition ( variables ชนิด Trigger คงรู้นะว่าอะไร gg_trg_Testjass นั่นเองที่ผม CreateTrigger ไว้ตั้งแต่แรกแล้ว , Condition ( function ชื่อ function ))* function จะต้อง returns เป็น boolean เท่านั้น โดยจะเป็นคำสั่งเฉพาะของมันโดยเฉพาะ และ function จะไม่มี parameter โดยเด็ดขาด

    TriggerAddActions ( variables ชนิด Trigger , function ชื่อ function )) * function จะไม่มี returns และ parameter โดย เด็ดขาด

    ตัวอย่าง

    TriggerAddCondition (gg_trg_Testjass , Condtion(function test_con))
    TriggerAddActions (gg_trg_Testjass , function test_act)


    ตัวอย่างฉบับเต็ม

    function con_Testj takes nothing returns boolean
    local boolean test = true // อันนี้ผมลองให้มันผ่านไปดู แต่ให้รู้ว่า Condition นั้นจะต้อง ห้ามมี parameter และ returns จะต้องเป็น boolean เท่านั้น
    return test
    endfunction

    function act_Testj takes nothing returns nothing
    call DisplayTextToForce( GetPlayersAll() , a) // อันนี้ผมทดสอบประกาศดู
    //สามารถเรียก method หรือดึง library มาใช้งาน ได้
    endfunction

    function InitTrig_Testjass takes nothing returns nothing
    set gg_trg_Testjass = CreateTrigger()
    call TriggerRegisterTimerEventSingle( gg_trg_Testjass , 1 )
    call TriggerAddCondition( gg_trg_Testjass , Condition ( function con_Testj ) )// จะไม่ใส่ก็ได้ถ้าไม่มี Condition นะ
    call TriggerAddAction( gg_trg_Testjass , function act_Testj )// จะไม่ใส่ก็ได้ถ้าจะให้ Event รันเดียวดาย อยู่ตัวเดียว ก็เหมือนการใส่ action นั่นแหล่ะ ก็เหมือนดังรูปภาพต่อไปนี้
    *ถ้าไม่ใส่ทั้ง TriggerAddCondition และ TriggerAddAction แต่ใส่ TriggerRegisterTimerEventSingle เพียงตัวเดียว
    endfunction

    // เทคนิคเล็กๆน้อยๆ

    function InitTrig_Testjass takes nothing returns nothing
    local trigger test = CreateTrigger()
    call TriggerRegisterTimerEventSingle( test , 1 )
    call TriggerAddCondition( test , Condition ( function con_Testj ) )// จะไม่ใส่ก็ได้ถ้าไม่มี Condition นะ
    call TriggerAddAction( test , function act_Testj )
    endfunction

    สามารถใช้แบบนี้ได้เลย แต่ที่สำคัญ

    InitTrig ของ jass จะเป็น initializer

    ดั่งนั้น เวลาตั้ง function นั้นให้ InitTrig_ชื่อTrigger ครับ

    เพราะถ้าเกิดไปตั้งชื่ออื่นมันจะไม่สามารถ รันเริ่มต้นเกมได้




    //-----------------------------------------------------------------------------------
    //สามารถเรียก method หรือดึง library มาใช้งาน ได้ เช่น

    function act_Testj takes nothing returns nothing
    local string a = test_a("test")
    call DisplayTextToForce( GetPlayersAll() , a)
    endfunction

    function test_a takes string a returns string
    return a
    endfunction

    ส่วน library แนะนำว่าให้สร้าง Trigger ใหม่ไปเลย เดี่ยวๆ ครับ

    แล้วดึงมาใช้ก็

    call ชื่อlibrary_ชื่อmethodหรือfunction(parameter ถ้าไม่มีก็ว่างไว้)

    variables แบบ Globals

    Coming Soon


    ภาคผนวด

    การใช้ loop



    ผมจะตั้งค่า i = 1

    แล้วก็สร้าง loop มาครอบข้อความ เพื่อจะให้ข้อความออก 5 ข้อความพร้อมกัน
    ซึ่ง exitwhen(i>5) มันจะออกก็ต่อเมื่อ i มากกว่า 5 ซึ่งจะออก ก็ต่อเมื่อ เงื่อนไขเป็นจริง ครับถ้าเป็นเท็จ จะ วนอยู่ข้างในนั้นเหมือนเดิม

    ดังนั้น ก็ต้อง set i = i + 1 ไม่งั้น ออกบาน ตะไทแน่นอนครับ เพื่อให้ i ขยับ ไปทีละ หนึ่ง ต่อ 1 รอบ ถ้าเงื่อนไขยังเป็นเท็จอยู่
    มันจะทำการ มาทวน ใน loop อีกครั้ง ครับ จนกว่า เงื่อนไขจะเป็นจริงเท่านั้น ถึงจะหยุด loop แล้วไป code ต่อไปครับ

    การใช้ If หรือสร้าง Condition นั่นเอง

    if(variables operator variables หรือ ตัวเลขและค่าตัวแปร string ไปเลยก็ได้) then
    ให้กระทำอะไรเมื่อเงื่อนไขเป็นจริง
    elseif(variables operator variables หรือ ตัวเลขและค่าตัวแปร string ไปเลยก็ได้) then
    ให้กระทำอะไรเมื่อเงื่อนไขข้างบนเป็นเท็จแล้ว เงื่อนไขนี้เป็นจริง
    else
    ให้กระทำอะไรก็ได้ ก็ตื่อเมื่อเงื่อนไขเป็นเท็จ
    endif

    หรือจะ

    if(variables operator variables หรือ ตัวเลขและค่าตัวแปร string ไปเลยก็ได้) then
    ให้กระทำอะไรเมื่อเงื่อนไขเป็นจริง
    endif

    ตัวอย่าง

    local integer a = 5
    if (a == '5') then
    ทำอะไรก็ได้ถ้า เงื่อนไขเป็นจริง
    endif

    if (variable == true and variable == false)then
    // หมายถึง และ แล้วส่วนเจ้าและนี่ เงื่อนไขทั้งสองด้านจะต้องผ่าน พร้อมกัน ถ้าฝั่งใดฝั่งหนึ่งผิด นั้นก็แสดงว่า ไม่ผ่านเงื่อนไข ก็กลายเป็น เท็จไป
    endif

    if (variable == true or variable == false) then
    // หมายถึง กับ แล้วเจ้า กับ เนีย ถ้าด้านใด ด้านหนึ่งตรงตามเงื่อนไขล่ะก็ เงื่อนไขนั้นก็จะเป็นจริงไปเลย ถ้าเงื่อนไข ไม่ตรงเลยสักตัว ก็จะเป็นเท็จ ไปเลย
    endif

    ขอบคุณ upload file จาก http://www.mediafire.com/
    ขอบคุณ ฝากรูปภาพ http://upic.me/
    ขอบคุณ background จาก http://www.diablo3.nl/war3/wallpaper/
    เครดิต Variable บางส่วนจาก : http://www.lks.ac.th/anchalee/c_var.htm
    Last edited by nasnet; 28-05-2013 at 11:32 AM.

  2. #2
    Senior Member
    Join Date
    Jul 2011
    Posts
    493
    รู้สึกเข้าใจง่ายกว่าของท่าน Fenix มาก

    เขียนต่อเรื่อยๆนะครับ อยากลองใช้เหมือนกัน

  3. #3

    Join Date
    Jul 2011
    Posts
    223
    pinned!

  4. #4
    Senior Member
    Join Date
    Jul 2011
    Posts
    83
    มาจอง เผื่อไม่พอ อิอิ อ่าวติด pinned ด้วย อิอิ

  5. #5
    Member
    Join Date
    Jul 2011
    Posts
    40
    GOD!!!
    ชาบูๆๆ

  6. #6
    Senior Member
    Join Date
    Jul 2011
    Posts
    83
    จบ หลักสูตร Basic Jass ใครไม่เข้าใจตรงไหนถามได้ และจะได้ปรับปรุง ข้างบนด้วย

  7. #7
    Senior Member
    Join Date
    Jul 2011
    Posts
    186
    เคยลงทีหนึง มันกดรันได้ไหม? Ctrl+F9 จำได้ว่าไม่ได้ P จังบอกว่าเวลารันให้กดเข้าเกมส์เอา มันเป็นแบบนั้นเหรอ?

  8. #8
    Senior Member
    Join Date
    Jul 2011
    Posts
    83
    Quote Originally Posted by buffaloboyz View Post
    เคยลงทีหนึง มันกดรันได้ไหม? Ctrl+F9 จำได้ว่าไม่ได้ P จังบอกว่าเวลารันให้กดเข้าเกมส์เอา มันเป็นแบบนั้นเหรอ?
    ใช่แล้วครับ รันต้องเข้าเกมเอา

  9. #9
    dieaw[th]'s Avatar
    Join Date
    Jul 2011
    Posts
    508

    ดีมากครับ

    ดีมากครับ
    .................

  10. #10
    Senior Member
    Join Date
    Jul 2011
    Posts
    186
    ตอนเห็นหน้าตามันทีแรก ร้องว่า ว้าว เลยล่ะ แต่ สุดท้ายก็ไม่เอา หนีไปดื้อ เพราะความขี้เกียจ หึหึหึ
    ขอบใจมาครับที่ทำกระทู้ดีๆ ไว้ผมเริ่มคล่องกับ Basic Jass จะรีบๆ ตามไปนะครับ

Facebook Comments


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •