Support OpenKore:
Learn about
the Fund Pool

มาโครปลั๊กอิน

มาโครปลั๊กอินคืออะไร

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

Contents


การติดตั้งมาโครปลั๊กอิน

การติดตั้งมาโครปลั๊กอินใน OpenKore

  1. ดาวน์โหลด มาโครปลั๊กอิน
  2. ไปที่โฟลเดอร์ OpenKore (โฟลเดอร์ที่มีไฟล์ชื่อ openkore.pl อยู่)
  3. ถ้ายังไม่มีโฟลเดอร์ชื่อ plugins อยู่เลย ให้สร้างโฟลเดอร์ย่อยชื่อ plugins ขึ้น
  4. ใน zip ไฟล์ของมาโครปลั๊กอิน จะมีไฟล์ชื่อ macro.pl และโฟลเดอร์ Macro ให้แตกไฟล์เหล่านี้ไปยังโฟลเดอร์ plugins
  5. ในโฟลเดอร์ control ของ OpenKore ให้สร้างไฟล์เปล่าๆขี้นมาไฟล์หนึ่งตั้งชื่อว่า macros.txt ซึ่งในไฟล์นี้จะเป็นที่ที่เราใส่คำสั่ง macros/automacros

หลังจากที่ติดตั้งเสร็จแรียบร้อยแล้ว จะเห็นว่าไฟล์ Openkore ทั้งหมดควรจะเป็นดังต่อไปนี้ (ยังไม่ต้องสนใจไฟล์ของตัว Openkore เอง):

openkore
|-- openkore.pl
|-- control
|   `-- macros.txt
|-- fields
|-- logs
|-- plugins
|   |-- Macro
|   |   |-- Automacro.pm
|   |   |-- Data.pm
|   |   |-- Parser.pm
|   |   |-- Script.pm
|   |   `-- Utilities.pm
|   `-- macro.pl
|-- src
`-- tables


การติดตั้งมาโครปลั๊กอินใน VisualKore

  1. ดาวน์โหลด มาโครปลั๊กอิน
  2. ใน zip ไฟล์ของมาโครปลั๊กอิน จะมีไฟล์ชื่อ macro.pl และโฟลเดอร์ Macro ให้แตกไฟล์เหล่านี้ไปยัง C:\Program Files\VisualKore\Plugins
  3. ไปที่ the VisualKore Profiles dialog เลือก profile แล้วคลิ๊ก "Edit Profile"
  4. จะมีหน้าต่างโฟลเดอร์ขึ้นมา ในโฟลเดอร์นี้ให้สร้างไฟล์เปล่าๆขี้นมาไฟล์หนึ่งตั้งชื่อว่า macros.txt ซึ่งในไฟล์นี้จะเป็นที่ที่เราใส่คำสั่ง macros/automacros

การปรับปลั๊กอินสามารถดูข้อมูลได้ที่ส่วนของ Configuration files และ ก่อนที่จะใช้ปลั๊กอินได้ ผู้ใช้จำเป็นที่จะต้องอ่านศึกษาข้อความโดยละเอียดทั้งหมดก่อน

หมายเหตุ:

  • ในแต่ล่ะแฟ้มหรือโฟลเดอร์โปรไฟล์ของ VisualKore จะต้องมีแฟ้มหรือโฟลเดอร์ชื่อ "control" ที่ได้กล่าวไว้แล้วในคู่มือ
  • ในการใช้มาโครตัวเดียวกันกับหลายๆ โปรไฟล์ ผู้ใฃ้ต้อง copy ไฟล์ macros.txt ที่ต้องการไปยังแต่ละโปรไฟล์ที่ผู้ใช้ต้องการใช้ macro นอกจากนี้ในทุกๆ ไฟล์ของ config.txt ของแต่ละโปรไฟล์ต้องมีบรรทัดที่ทำให้ปลั๊กอินทำงานบรรจุอยู่ด้วย

คำสั่งใน มาโคร

macro <macroname> [options] [-- parameter(s)]

Runs macro <macroname>.

ตัวเลือก ตั้งค่า คำอธิบาย
-repeat n ทำมาโครซ้ำ n ครั้ง
-overrideAI (none) เป็นการควบคุม AI ของ Openkore
-macro_delay delay เป็นการควบคุม global macro_delay สำหรับมาโครที่กำลังทำงานอยู่
-exclusive (none) ไม่อนุญาติให้ automacros ยกเลิกมาโครที่กำลังทำงานอยู่
-orphan method ใช้ method ในการจัดการ Orphaned macros

ตัวแปรในมาโครสามารถกำหนดได้หลังสัญญลักษณ์ขีดสองขีด (--) ตัวแปรเหล่านี้จะถูกเก็บไว้ใน ตัวแปร $.param1 to $.paramN. ยกตัวอย่างเช่น:

macro foo {
 log Parameter 1 is $.param1
 log Parameter 2 is $.param2
}

เมื่อเรียกไปยังมาโคร foo macro foo -- foo bar จะพิมพ์ข้อความว่า

[macro] Parameter 1 is foo
[macro] Parameter 2 is bar

macro list

ลิสต์รายชื่อมาโครทั้งหมดที่มีอยู่

macro stop

หยุดการทำงานของมาโครที่ทำอยู่

macro pause

เป็นคำสั่งสำหรับหยุดการทำงานของมาโครที่กำลังทำงานอยูชั่วคราว

macro resume

เป็นคำสั่งให้มาโครที่ถูกหยุดการทำงานชั่วคราวกลับมาทำงานใหม่

macro version

สั่งให้บอทพิมพ์เวอร์ชั่นของมาโคร

macro reset [<name(s)>]

เป็นการตั้ง automacro ที่ run-once ทั้งหมดจะถูกเรียกให้กลับมาตรวจสอบเงื่อนไขใหม่อีกครั้งหรือเฉพาะ automacro <name>(สามารถกำหนดชื่อใหม่สำหรับ automacro ที่ต้องการจะเรียกให้กลับมาตรวจสอบอีกครั้งได้ใน <name> ได้ด้วยตนเอง)

macro status

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

การจัดการกับไฟล์ Configuration files

control/macros.txt

ใส่ macros and automacros ในไฟล์ macros.txt

control/timeouts.txt

เพิ่มบรรทัด macro_delay ตั้งค่าเป็นวินาทีที่ต้องการให้ปลั๊กอินหยุดระหว่างคำสั่งมาโคร

control/config.txt

ตัวแปร การตั้งค่า คำอธิบาย
macro_nowarn 0
1
เปิด/ปิด คำเตือนเมื่อไม่ได้ใช้ callในautomacro(s)
macro_orphans terminate
reregister
reregister_safe
ดูรายละเอียดใน Orphaned macros
macro_file filename ไฟล์ที่มีคำสั่งมาโครอยู่ข้างใน ("macros.txt")
macro_allowDebug 0
1
console- เป็นการตรวจสอบกระบวนการจากข้อความ debug ของ openkore (default: 0) คำเตือน ทำให้การทำงานของ ปลั๊กอินช้าลง

ก่อนลงมือเขียนมาโคร

โปรดอ่านคู่มือโดยละเอียดทั้งหมดก่อนใช้มาโคร
ถ้าต้องการใช้คำสั่งของ openkore ในมาโครกรุณาอ่านใน console commands. พึงจำไว้ว่า คำสั่งบางคำสั่งที่เกี่ยวข้องกับการจัดการแถวของ ai (ai queue)จะไม่สามารถใช้ได้

กรุณาอ่าน announcements อาจจะมีข้อมูลและตัวอย่างที่เป็นประโยชน์ในการนำมาใช้

ภาษามาโคร (Macro syntax)

macro foo {
   do this..
   and that..
   yattayatta..
}

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

การใช้คำสั่ง do <command>

เป็นการสั่งให้ openkore run <command>.

Example:
ยกตัวอย่างเช่น

 macro foo {
    do move 123 234 prontera
    do sit
    do c "hello world"
 }


log <text>

ส่งข้อความใน <text> ไปยังคอนโซล

Example:
ยกตัวอย่างเช่น

macro foo {
   log This line logs a text to console.
   log All your base are belong to us!
}


pause [<n>]

หยุดเป็นเวลา 1 หรือ <n> วินาที

Example:
ยกตัวอย่างเช่น

 macro foo {
    log I'm here and...
    pause 10
    log now I'm here.
 }


call <macroname> [<n>]

เรียกไปยังมาโครที่ตั้งชื่อไว้ใน <macroname>เป็นจำนวน [<n> ครั้ง] เมื่อ <macroname> เสร็จสิ้นแล้วมาโครที่กำลังทำอยู่ก็จะทำงานต่อ

release (<name> | all)

เป็นการกลับมาที่ automacro ที่ถูกล๊อกการทำงานจากคำสั่ง ("run-once" หรือคำสั่ง "lock") หรือเป็นการกลับมาที่ automacros ทั้งหมดเมื่อใช้คำสั่ง release all

lock <name>

เป็นการล๊อค automacro ที่ตั้งชื่อใน <name> และไม่ให้มีการเชคเงื่อนไขที่เราตั้งไว้ใน automacro ด้วย

stop

หยุดการทำงานของมาโครทันที

set <option> <value>

ตั้งรูปแบบมาโคร:

  • orphan method
  • macro_delay timeout
  • overrideAI [0|1]
  • repeat times
  • exclusive [0|1]

โปรดดูที่ส่วนของ automacro


การกำหนดตัวแปร (variable) และการนำมาใช้

ผู้ใช้สามารถที่จะกำหนดและทำงานกับตัวแปร ที่ผู้ใช้กำหนดขึ้นเองได้
การตั้งค่าตัวแปรทำได้โดยใช้ $variable = value, และถ้าต้องการเรียกใช้ค่า ให้ใช้ $variable
การเพิ่มหรือลดค่าตัวแปรสามารถทำได้โดยการใช้ $variable++ or $variable--
สำหรับการคำนวณให้ใช้ @eval ตัวอย่างการแยก item ตัวแรกออกจากลิสต์ที่ใช้ comma แยกลิสต์ออกจากกัน

macro foo {
  $list = element one,element two,foo,bar,baz
  $var = [$list]
  log var contains $var (element one)
  log list contains $list (element two,foo,bar,baz)
}

พึงระลึกไว้ว่า ชื่อของตัวแปรจะต้องเริ่มต้นด้วยพยัญชนะและต้องไม่มีอักขระอื่นๆ มาปะปนยกเว้นพยัญชนะและตัวเลขจำนวนเต็มเท่านั้น

Example:
ยกตัวอย่างเช่น

macro foo {
   $var1 = world
   $var2 = hello
   $var3 = $var2 $var1
   log next line will yell out "hello world . world . hello"
   do c $var3 . $var1 . $var2
   $var4 = 47
   log \$var4 is $var4
   $var4++
   log \$var4 is $var4
   $var4 = @eval ($var4 + 52)
   log \$var4 is $var4
}


ตัวแปรพิเศษ (Special variables)

มีตัวแปรสุ่มพิเศษหลายๆ ตัวแปรที่เริ่มต้นด้วยจุด

  • $.map - แผนที่ที่บอทอยู่ ("prontera")
  • $.pos - พิกัดที่บอทอยู่ ("123 234")
  • $.time - เวลาขณะนี้ ใช้เวลาของยูนิค(unix timestamp) ("1131116304")
  • $.datetime - วันและเวลาขณะนี้ ("Fri Nov 4 15:59:36 2005")
  • $.hp - hp ขณะนี้
  • $.sp - sp ขณะนี้
  • $.lvl - เบสเลเวลของตัวละครขณะนี้
  • $.joblvl - จ๊อบเลเวลของตัวละครขณะนี้
  • $.spirits - จำนวนลูกไฟ (spirit spheres) ขณะนี้
  • $.zeny - จำนวนเงินขณะนี้
  • $.status - สถานะในขณะนี้ ใช้คอมม่าแยกลิสต์ออกจากกัน
  • $.lastLogMsg - ประโยคสุดท้ายใน console ที่ triggered เงื่อนไขของ automacro "consol"
  • $.lastpub - ชื่อของผู้เล่นคนสุดท้ายที่เป็นคน triggered เงื่อนไขของautomacro "pubm"
  • $.lastpubMsg - ข้อความที่ผู้เล่นพิมพ์ข้อความสุดท้าย
  • $.lastpm - ชื่อชองผู้เล่นที่กระซิบคนสุดท้ายแล้ว trigger เงื่อนไขของ automacro "pm"
  • $.lastpmMsg - ข้อความที่ผู้เล่นที่กระซิบคนสุัดท้ายแ้ล้ว triggered เงื่อนไขของ automacro "pm"
  • $.lastguild - ชื่อของผู้เล่นคนสุดท้ายที่ triggered เงื่อนไขของ automacro "guild"
  • $.lastguildMsg - ประโยคที่ผู้เล่นคนสุดท้ายที่ triggered เงื่อนไขของ automacro "guild" เขียน
  • $.lastparty - ชื่อของผู้เล่นคนสุดท้ายที่ triggered เงื่อนไขของ automacro "party"
  • $.lastpartyMsg - ประโยคที่ผู้เล่นคนสุดท้ายที่เป็นคน triggered เงื่อนไขของ automacro "party"
  • $.lastMonster - monster ตัวสุดท้ายที่ triggered เงื่อนไขของ automacro "monster"
  • $.lastMonsterPos - พิกัดสุดท้ายของ monster ตัวสุดท้ายนั้น ("123 234 prontera")
  • $.lastMatchN - อ้างอิงย้อนกลับไปที่ regexp ล่าสุดที่ตรงกัน
  • $.paramN - คำสั่ง parameters (โปรดอ่าน commands)
  • $.caller - ชื่อของ automacro สุดท้ายที่ triggered การทำงานของมาโคร
  • $.hooksaveN - ค่าหนึ่งของ hash key (เป็น argument ที่ถูกให้กับ hook)

ตัวแปรชนิดวน ( Nested variables)

ผู้ใช้สามารถกำหนดตัวแปรแบบวน หรือแบบที่ไม่ตายตัวได้ดังนี้

Example:
ยกตัวอย่างเช่น

macro foo {
    $var = foo
    log \$var is "foo"
    ${$var} = bar
    log \$\$var is \$foo is "bar"
}


การจัดทำและการตั้งชื่อ (Flow control and labels)

ในโปรแกรมชั้นสูงจะมีโครงสร้างในลักษณะของ "if .. then", "while", "repeat", "for .. next", "do .. while" และฟังก์ชั่นเรียกไปยังตัวแปร หลักๆ ก็มีสามตัวคือ "if", "goto" and "while" ดังนั้นมาโครจึงนำคำสั่งสามตัวดังกล่าวมาใช้ เนื่องจากมาโครไม่มีหมายเลขบรรทัด (ที่มองเห็น) กำกับ ดังนั้นผู้ใช้ก็อาจจะต้องใช้เลเบลกำกับหรือใช้สัญญาลักษณ์โคลอน(:)ตามด้วยชื่อของเลเบล

ตัวอย่างของการใช้โครงสร้าง a "while":

macro foo {
    $i = 0
    log the next lines will loop 11 times (0 .. 10)
    while ($i <= 10) as exampleloop
    	log loop $i
    	$i++
    end exampleloop
}


Example:
ยกตัวอย่างเช่น

macro foo {
   $i = @random ("1", "2", "3")
   if ($i == 1) goto one
   if ($i == 2) goto two
   log i is three.
   goto end
   :one
   log i is one
   goto end
   :two
   log i is two
   :end
}


เงื่อนไข (condition)

เงื่อนไข ความหมาย
< น้อยกว่า
<= น้อยกว่าหรือเท่ากับ
== เท่ากับ
>= มากกว่าหรือเท่ากับ
> มากกว่า
 != ไม่เท่ากับ
~ <ส่วนทางซ้าย> เป็นส่วนประกอบของ <ส่วนทางขวา (ใช้คอมมาแยกลิสต์ออกจากกัน)>

keywords ที่สำคัญ

@npc (<x> <y>)

ขยายไปยังหมายเลข npc ที่อยู่ที่พิกัด <x>, <y> หรือ -1 ถ้าไม่พบ npc

@inventory (<item>)

ค้นหา <item> ในช่องเก็บของ ผลที่ได้คือ ID ของ item หรือ -1 ถ้าไม่เจอ item นั้นๆ

@Inventory (<item>)

เช่นเดียวกันกับ @inventory แต่จะให้ค่า IDs ที่ตรงกัน โดยใช้คอมม่าแยกลิสต์ออกจากกัน หรือให้ค่า -1 ถ้าไม่มี item นั้นๆ

@cart (<item>)

ค้นหา <item> ในรถเข็น ผลที่ได้รับคือ ID ของ item ที่ต้องการหรือ -1 ถ้าไม่เจอ item ที่ต้องการ

@Cart (<item>)

เหมือนกันกับคำสั่ง @cart แต่ผลที่ได้รับคือ IDs ของ item ที่ต้องการ โดยใช้คอมม่าแยกลิสต์ออกจากกัน (,) ถ้าได้ -1 แสดงว่าไม่มี item ที่ต้องการ

@storage (<item>)

ค้นหา <item> ที่ต้องการในคาฟราเก็บของ ผลที่คือ ID ของ item นั้นหรือถ้าได้ -1 แสดงว่าหา item นั้นไม่เจอ

@Storage (<item>)

เหมือนกันกับคำสั่ง @storage แต่ผลที่ได้คือ IDs ที่ตรงกันทั้งหมด โดยใช้คอมม่าแยกลิสออกจากกัน (,) ถ้าได้ -1 แสดงว่าไม่มี item ที่ต้องการ

@player (<name>)

หาผู้เล่นที่ชื่อ <name> ผลที่ได้รับ ID ของผู้เล่น หรือถ้าได้ -1 แสดงว่าหาผู้เล่นดังกล่าวไม่เจอ

@vender (<name>)

หาร้านค้าที่ชื่อ <name> ผลที่ได้คือ ID ของร้านค้าถ้าได้ -1 แสดงว่าหาไม่พบ

@store (<name>)

ค้นหา item <name> ในคาฟราเก็บของ ผลที่คือ ID ของ item นั้นหรือถ้าได้ -1 แสดงว่าหา item นั้นไม่เจอ

@random ("<argument1>"[, "<argument2>"[, ...]])

สุ่ม argument 1,2,3 ที่ตั้งไว้ ผลที่ได้รับคือ argument อันใดอันหนึ่ง

@rand (<n>, <m>)

สุ่มตัวเลขระหว่าง (และ รวมถึง) <n> และ <m>

@invamount (<item>)

แสดงจำนวนของ <item> ที่ต้องการ ในช่องเก็บของ

@cartamount (<item>)

แสดงจำนวนของ <item> ที่ต้องการในรถเข็น

@shopamount (<item>)

แสดงจำนวนของ <item> ที่ต้องการในร้าน

@storamount (<item>)

แสดงจำนวนของ <item> ที่ต้องการในช่องเก็บของ

@eval (<argument>)

คำนวณ <argument>

@arg ("<argument>", <n>)

แสดงลำดับที่ <n>th ของคำที่กำหนดใน <argument> ถ้าดัชนีของคำอยู่นอกเหนือจากนี้จะแสดงผลเป็น string เปล่า

@config (<variable>)

แสดงผลเป็นค่าของตัวแปร <variable> ที่กำหนดในไฟล์ config.txt

"คำสั่งประเภทลูกโซ่" (Chaining commands)

ผู้ใช้สามารถสั่งมาโครทำงานโดยใช้คำสั่งเป็นชุดๆ ติดๆ กันโดยไม่ต้องรอแถวของ ai ของ openkore หรือ macro delay ผู้ใช้เพียงแค่ใส่วงเล็บ [ ] ล้อมกลุ่มชุดคำสั่ง

ตัวอย่าง (พร้อมหมายเลขกำกับบรรทัด):

0 macro foo {
1  do whatever
2  log yet another line
3  [
4     do something
5     do something else
6     log foo
7  ]
8  log done
9 }


บรรทัดที่ 3 เริ่มการใช้คำสั่งประเทภลูกโซ่ (chaining mode) บรรทัดนี้ไม่มี delay บรรทัดที่ 4, 5 และ 6 จะทำงานต่อจากคำสั่งก่อนหน้านั้นโดยไม่มี delay และจะไม่สามารถหยุดการทำงานได้จนกว่าจะเสร็จ บรรทัดที่ 7 หยุดการใช้คำสั่งแบบลูกโซ่ และบรรทัดที่ 8 จะทำงานหลังจากมีการ delay เป็นวินาทีใน $macro_delay seconds

ตัวอย่างมาโครแบบง่ายๆ

Example:

macro foo {
   $foobegin = $.pos
   do move 168 128 prt_in
   do talk @npc (172 130)
   do store
   do store
   do buy @store (Silver Arrow) 10000
   do move 280 198 prontera
   do talk @npc (282 200)
   do talk cont
   do talk resp 1
   do storage add @inventory (Silver Arrow) @eval (@invamount (Silver Arrow) - 1000)
   do move $foobegin
}

เมื่อมีการเรียกผ่านมายังมาโคร "macro foo [times]" มาโครจะทำงานดังต่อไปนี้

  • เก็บค่าพิกัดขณะนั้นไว้ที่ตัวแปร "foobegin"
  • เดินไปที่พิกัด 168 128 prt_in (ร้านขายอาวุธ)
  • คุยกับ npc ที่ตำแหน่ง 172 130 (คนขายอาวุธ)
  • พิมพ์ "store" สองครั้งเพื่อดูว่ามีอะไรขายบ้าง
  • ซื้อลูกธนูเงิน 10,000 ดอก
  • เดินไปที่ 280 198 prontera (ประตูทางทิศตะวันออกของเมืองพรอนเทรา)
  • คุยกับคาฟรา
  • คุยต่อ (talk cont) และ เลือกตอบคำถามข้อ 1(talk resp 1) เพื่อเปิดคาฟราเก็บของ
  • เก็บลูกธนูเงินที่ซื้อทั้งหมดในคาฟราเก็บของเหลือไว้ 1000 ดอก และ
  • เดินกลับไปยังพิกัดที่เคยอยู่ก่อนที่จะเริ่มต้นมาโครนี้

ภาษาใน Automacro (Automacro syntax)

Example:
ยกตัวอย่างเช่น

automacro foo {
    <condition> bar
    <condition> baz, yatta
    call macroname
}
automacro mi {
    <condition> moo
    <condition> xyz
    call {
    	do this
    	do that
    }
}


Automacros คือ macros ที่จะเริ่มทำงานอัตโนมัติเมื่อสถานะต่างๆ ที่ตั้งไว้ถูกต้องตามเงื่อนไข

map <mapname>

triggers เมื่อแผนที่ในปัจจุบันคือ <mapname>

location [not] <mapname [<x1> <y1> [<x2> <y2>]] [, ...]

triggers เมื่อบอทไม่ได้อยู่ในตำแหน่งที่กำหนดไว้
ถ้าไม่ได้กำหนดพิกัด <x1> <y1> หรือ <x2> <y2> จะ triggers เมื่อไม่ได้อยู่ใน <mapname>.
ถ้าไม่ไ่ด้กำหนดพิกัด <x2> <y2> จะ triggers เมื่อไม่ได้อยู่ในแผนที่ <mapname> ตำแหน่งพิกัด <x1>, <x2>.
ถ้าทั้ง <x1> <y1> และ <x2> <y2> ถูกกำหนดจะทำงานเมื่ออยู่ใน <mapname> ระหว่าง <x1>, <y1> (มุมซ้ายบนสุด) และ <x2>, <y2> (มุมขวา, เมื่อ <x1> < <x2> และ <y1> > <y2>
แยกโดย arguments โดยใช้ คอมมา (,) จะถือว่าเป็นเงื่อนไขแบบหรือ (OR conditions):
Example:

location geffen, prontera 123 234


จะ triggers เมื่ออยู่ในเมือง geffen หรือในเมือง prontera ที่พิกัด 123 234
ถ้ามีหลายๆ บรรทัดจะถือว่าเป็นการใช้เงื่อนไขแบบและ (AND conditions):
Example:

location not geffen
location not prontera

triggers เมื่อไม่ไ่ด้อยู่ทั้งในเมือง geffen หรือในเมือง prontera

mapchange (<mapname>|any) [, ...]

triggers เมื่อเปลี่ยนแผนที่ไปยัง <mapname>. แต่ถ้าใช้ any จะ trigger ทุกครั้งที่มีการเปลี่ยนแผนที่
ถ้าใส่คอมมา(,) แยกกันให้ถือว่าเป็นการเชคสภาพแบบ OR (หรือ)

hp <condition> <amount>[%]

triggers เมื่อ hp เท่ากับเงื่อนไขที่กำหนดใน <condition>
โดย<amount>เป็นแบบค่า hp โดยตรง (absolute value) หรือมีค่าเป็นเปอร์เซนต์ (relative value)
ถ้ามีหลายๆ บรรทัดจะถือว่าเป็นการใช้เงื่อนไขแบบและ AND

sp <condition> <amount>[%]

triggers เมื่อ sp เท่ากับเงื่อนไขที่กำหนดใน <condition>
<amount> เป็นแบบค่า sp โดยตรง(absolute value) หรือค่าเป็นเปอร์เซนต์ (relative value)
ถ้ามีหลายๆ บรรทัดจะถือว่าเป็นการใช้เงื่อนไขแบบและ (AND conditions)

spirit <condition> <amount>

triggers เมื่อลูกบอล (spirits) เท่ากับเงื่อนไขที่กำหนดใน <condition> เท่ากับ <amount>
ถ้ามีหลายๆ บรรทัดจะถือว่าเป็นการใช้เงื่อนไขแบบและ (AND conditions)

weight <condition> <amount>[%]

triggers เมื่อน้ำหนัก อยู่ในเงื่อนไข<condition>
ตรงตามปริมาณที่ต้องการ โดยปริมาณจะต้องใส่เลขจำนวนเต็มหรือเปอร์เซนต์
ถ้าเขียนหลายๆ บรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้คำสั่ง AND

cartweight <condition> <amount>[%]

triggers เมื่อน้ำหนักรถเข็นอยู่ในเงื่อนไข <condition> ปริมาณที่ต้องการ
โดยปริมาณ จะต้องใส่เลขจำนวนเต็ม และเป็น เปอร์เซนต์ หรือว่าเป็นจำนวนจริงๆ (relative value)
ถ้าเขียนหลายๆ บรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้คำสั่ง AND.

zeny <condition> <amount>

triggers เมื่อจำนวนเงินถูกต้องตามเงื่อนไข <condition> ในปริมาณที่ต้องการ
ถ้าเขียนหลายๆ บรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้คำสั่ง AND คำสั่งนี้มักใช้เมื่อมีการ deal ขายของ


soldout <condition> <slots>

triggers เมื่อจำนวน items ในร้านขายของ ได้ขายไปตามเงื่อนไขใน <condition>ที่ตั้งไว้ใน <slots>
บรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้คำสั่ง AND

status [not] <status> [, ...]

triggers เมื่อ[ไม่]อยู่ในสถานะที่กำหนดไว้ใน <status>
ถ้าใส่ Comma (,) แยกให้ถือว่าเป็นการเชคสภาพแบบ OR (หรืออย่างใดอย่างหนึ่ง )
บรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้คำสั่ง AND

inventory "<item>" <condition> <amount> [, ...]

triggers เมื่อใน inventory มีจำนวน items ตรงกับเงื่อนไขที่กำหนด
ถ้าใส่ Comma (,) แยกให้ถือว่าเป็นการเชคสภาพแบบ OR (หรืออย่างใดอย่างหนึ่ง )
บรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้คำสั่ง AND

storage "<item>" <condition> <amount> [, ...]

triggers เมื่อใน storage (คาฟรา) มีจำนวน items ตรงกับเงื่อนไขที่กำหนด
ถ้าใส่ Comma (,) แยกให้ถือว่าเป็นการเชคสภาพแบบ OR (หรืออย่างใดอย่างหนึ่ง )
บรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้คำสั่ง AND

cart "<item>" <condition> <amount> [, ...]

triggers เมื่อ item ใน cart มีจำนวนตามเงื่อนไข <condition> ที่กำหนดใน <amount>
ถ้าใส่ Comma (,) แยกให้ถือว่าเป็นการเชคสภาพแบบ OR (หรืออย่างใดอย่างหนึ่ง)
บรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้คำสั่ง AND

shop "<item>" <condition> <amount> [, ...]

triggers เมื่อ item ในร้านมีจำนวนตามเงื่อนไข <condition> ที่กำหนดใน <amount>
ถ้าใส่ Comma (,) แยกให้ถือว่าเป็นการเชคสภาพแบบ OR (หรืออย่างใดอย่างหนึ่ง )
บรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้คำสั่ง AND

base <condition> <level>

triggers เมื่อเลเวลตัวละครมีเลเวล เท่ากับเงื่อนไขใน<condition> ที่ตั้งไว้
บรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้คำสั่ง AND

job <condition> <level>

triggers เมื่อจ๊อบเลเวลของตัวละครเท่าักับเงื่อนไขใน <condition> ที่ตั้งไว้
บรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้คำสั่ง AND

class <job>

triggers เมื่อ อาชีพเป็นไปตามที่ตั้งไว้

spell <spell> [, ...]

triggers เมื่อมีการร่ายเวทย์ ที่ตั้งไว้ใน <spell> ไปยังตัวเราหรือไปยังในบริเวณที่เราอยู่
ถ้าใส่ Comma (,) แยกลิสต์จากกันให้ถือว่าเป็นการเชคสภาพแบบ OR

monster <monstername> [, ...]

triggers เมื่อมี monster ที่เราตั้งไว้ใน <monstername> อยู่ใกล้ๆ เมื่อ trigger แล้วจะมีการ set ค่าตัวแปร $.lastMonster และ $.lastMonsterPos
ถ้าใส่ Comma (,) แยกลิสต์ออกจากกันให้ถือว่าเป็นการเชคสภาพแบบ OR (หรืออย่างใดอย่างหนึ่ง)
ถ้าบรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้เงื่อนไข AND

notMonster <monstername> [, ...]

triggers เมื่อ monster ที่เราไม่ได้ตั้งไว้ในลิสต์ปรากฎขึ้น
ถ้าใส่ Comma (,) แยกลิสต์ออกจากกันให้ถือว่าเป็นการเชคสภาพแบบ AND

aggressives <condition> <number>

triggers เมื่อจำนวน <number> monster โจมตีเรา ถูกต้องตาม <condition>ที่ตั้งไว้
ถ้าใส่ Comma (,) แยกลิสต์ออกจากกันให้ถือว่าเป็นการเชคสภาพแบบ AND

player (<playername>|/<regexp>/[i]) [, <distance> ]

triggers เมื่อผู้เล่นชื่อที่ใส่ใน <playername> อยู่ในหน้าจอหรือในระยะห่างไม่เกินจำนวน <distance>บล๊อค
บรรทัดเรียงกันจะให้ถือเสมือนว่าใช้เงื่อนไข AND

equipped [<slot>] (<item>|none) [, ...]

triggers เมื่อสวมใส่ <item> หรือไม่ได้สวมใส่ item [ในช่อง <slot>] slot ในที่นี้หมายถึง ศรีษะส่วนบน, ศรีษะส่วนกลาง, ศรีษะส่วนล่าง, มือซ้าย, มือขวา, เสื้อ, เกราะ, รองเท้า, เครื่องสวมใส่มือซ้าย, เครื่องสวมใส่มือขวาและลูกธนู
ถ้าใส่ Comma (,) แยกลิสต์ออกจากกันให้ถือว่าเป็นการเชคสภาพแบบ OR
บรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้เงื่อนไขแบบ AND

var <variable> (unset|<condition> <value>)

triggers เมื่อตัวแปร <variable> ถูก unset หรือว่าถูกต้องตาม<condition> <value> :บรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้เงื่อนไขแบบ AND

varvar <nested variable> (unset|<<condition> <value>)

triggers เมื่อตัวแปรแบบวน <nested variable> ถูก unset หรือถูกต้องตาม <condition> <value>
บรรทัดเรียงกันจะให้ถือเสมือนว่า ใช้เงื่อนไขแบบ AND

console ("<text>"|/<regexp>/[i])

triggers เมื่อได้รับข้อความที่กำหนดไว้ใน <text> ผ่านทางหน้าต่าง console หรือข้อความถูกต้องตามที่ตั้งไว้ใน <regexp>
ตัวเลือก i หมายถึงอักษรภาษาอังกฤษสามารถใช้ได้ทั้งตัวเล็กและตัวใหญ่ใน <regexp>
กำหนดค่า <tt>$.lastLogMsg.

pm ("<text>"|/<regexp>/[i]) [, <player>]

triggers เมื่อได้รับข้อความกระซิบที่กำหนดไว้ใน <text> [จากผู้เล่น <player>] หรือข้อความที่ได้รับถูกต้องตามที่ตั้งไว้ใน <regexp>
ตัวเลือก i หมายถึงอักษรภาษาอังกฤษสามารถใช้ได้ทั้งตัวเล็กและตัวใหญ่ใน <regexp>
กำหนดค่า $.lastpm และ $.lastpmMsg.

pubm ("<text>"|/<regexp>/[i]) [, <distance>]

triggers เมื่อได้รับข้อความที่ตั้งไว้ใน <text> [ภายในระยะที่กำหนดใน <distance>] หรือข้อความถูกต้องตามที่ตั้งไว้ใน <regexp>
ตัวเลือก i หมายความว่าอักษรภาษาอังกฤษสามารถใช้ได้ทั้งตัวเล็กและตัวใหญ่ใน <regexp>
กำหนดค่า $.lastpub และ $.lastpubMsg.

party ("<text>"|/<regexp>/[i])

triggers เมื่อได้รับข้อความ <text> จากปาร์ตี้หรือข้อความถูกต้องตามเงื่อนไข <regexp> ตัวเลือก i หมายความว่าอักษรภาษาอังกฤษสามารถใช้ได้ทั้งตัวเล็กและตัวใหญ่ใน [1] ชุดคำสั่ง $.lastparty และ $.lastpartyMsg.

guild ("<text>"|/<regexp>/[i])

triggers เมื่อไดัรับข้อความที่กำหนดไว้ใน <text> จากกิลด์หรือข้อความที่ได้รับถูกต้องตามที่กำหนดไว้ใน <regexp>
ตัวเลือก i หมายความว่า จีงอักษรภาษาอังกฤษสามารถใช้ได้ทั้งตัวเล็กและตัวใหญ่ใน <regexp>
กำหนดค่า $.lastguild และ $.lastguildMsg.

hook <hookname>

triggers เมื่อ openkore เรียกไปยัง<hookname>.

save <hash key>

(ใช้ด้วยกันกับคำสั่ง hook) จัดเก็บค่าที่กำหนดใน <hash key> ในตัวแปรที่กำหนดใน .hooksave1 ไปยัง .hooksaveN

run-once (0|1)

เมื่อตั้งค่าให้เป็น 1 automacro จะไม่ทำงานหลังจากถูก triggered ใช้คำสั่งมาโคร release ในการที่จะให้ automacro ทำงานอีกที

overrideAI (0|1)

เมื่อตั้งค่าเป็น 1 มาโครจะไม่สนใจ AI ของ openkore ซึ่งหมายความว่ามาโครจะไม่หยุดในระหว่างที่บอทเดิน "move" หรือตาย "status dead"

delay <n>

เว้นระยะเป็นเวลา <n> วินาทีก่อนที่จะเรียกมาโครที่เกี่ยวข้อง

timeout <n>

เว้นระยะอย่างน้อย <n> วินาทีก่อนที่ automacro จะทำงานอีกที

macro_delay <n>

เป็นการทับตัวแปรรวม the global macro_delay ตั้งค่าสำหรับเรียกมาโคร

priority <num>

เลือกว่าจะต้องเชค automacros ตัวไหนก่อน ยิ่งค่า <num> น้อยเท่าไร automacro จะถูกเชคเร็วขึ้นแต่ถ้าไม่ได้ตั้งค่าตัวเลือกไว้ ถือว่า ค่าอยู่ที่ 0 (ศูนย์:จะถูกเชคก่อน).

exclusive (0|1)

Automacros ที่มีชุดพิเศษ exclusive และ automacros ตัวอื่นจะมาหยุดการทำงานไม่ได้ เช่นเดียวกับมาโคร 1.3.0 ปกติแล้ว automacro สามารถหยุดการทำงานของมาโครได้ ดังนั้นเพื่อที่จะไม่ให้ถูกหยุดก็อาจจะตั้งตัวเลือกนี้ หรือโดยการใฃ้คำสั่งตัวเลือกใน -exclusive

set <variable> <value>

ตั้งค่าตัวแปร<variable> ให้เป็นค่า <value> ผู้ใช้สามารถทำหลายๆ ชุด set หลายๆ บรรทัดต่อ 1 automacro.

call <name>

เรียกมาโคร macro ชื่อ <name> เมื่อ automacro ถูก triggered.

call {

<instructions>
}

เรียกไปยัง<instructions> เมื่อ automacros ถูก triggered

orphan <method>

จัดตั้งวิธีการจัดการกับ orphaned

ตัวอย่างการใช้ Automacro

Example:

automacro checkshop {
   location prontera
   soldout >= 3
   delay 60
   call reopenshop
}

macro reopenshop {
   do closeshop
}

มาโครนี้ถูก triggered เมื่อเปิดร้านในเมืองพรอนเทราและมี items ขายไปแล้วสามชิ้นหรือมากกว่า เมื่อ triggered แล้วจะรอ 1 นาทีแล้วเรียกไปยังมาโครชื่อ "reopenshop" เพื่อปิดร้าน ถ้าผู้ใช้เปิดร้านอยู่

shopAuto_open or

autoshop

ตั้งค่าเป็น 1, จะเปิดร้านอีกครั้งหนึ่งหลังจากระยะเวลานึง

การเขียน Comments/หรือข้อความกำกับมาโคร

เราสามารถใส่ข้อความกำกับกันลืม หรือว่าข้อความอธิบายว่าทำอะไรไว้ในมาโครได้ด้วยการใส่เครื่องหมาย # ไว้ข้างหน้าบรรทัด ตัวอย่างเช่น

Example:
ตัวอย่าง

# บรรทัดนี้เป็นการอธิบายมาโครที่ทำงาน

Orphaned macros

ถ้าสมมุติว่าในระหว่างที่มาโครทำงาานอยู่แล้วใช้คำสั่ง ai clear มาโครนั้นจะกลายเป็น orphaned ซึ่งหมายความว่ามาโครที่ทำงานอยู่จะไม่สามารถทำงานต่อได้เนื่องจากต้องใช้แถวใน AI ตั้งแต่แรกเพื่อที่จะใส่ใน"macro" (หรือ "deal") ดังนั้นเมื่อแถวของ AI ถูกเคลียร์ทำให้คำสั่งที่ป้อน "macro" หายไปด้วย

ก่อนเวอร์ชั่น 1.0.2 ปัญหานี้ได้รับการแก้ไขโดยการพิมพ์ใน console ว่า "macro stop" แต่หลังจากเวอร์ชั่น 1.0.2 ขึ้นไปผู้ใช้อาจจะเลือกว่าจะใช้กับกระบวนการไหนเพื่อที่จะแก้ไขปัญหานั้น ในการทำมีอยู่สามวิธี:

terminate หยุดมาโคร (เหมือนกับใข้คำสั่ง macro stop)
reregister ลงทะเบียนใหม่ในแถวของ AI ทับคำสั่งอื่นที่เข้ามาทั้งหมด

ในที่นี้หมายความว่าเป็นการบังคับให้มาโครทำงานต่อเนื่องไป

reregister_safe ลงทะเบียนใหม่ในแถวของ AI เมื่อ AI อยู่ในสถานะนิ่ง (ไม่มีแถวของคำสั่งเข้ามา)

ในที่นี้หมายความว่ามาโครจะทำงานต่อเมื่อเสร็จงานด้านอื่นหมดแล้ว

สิ่งที่ต้องทำ/bugs ที่ทีมงานรับรู้แล้ว/ข้อจำกัดที่ทีมงานรับรู้แล้ว

  • automacro check console "%" ไม่ต้องสนใจโดเมนต่อไปนี้: macro และ cvsdebug.
  • อย่าใช้เครื่องหมายวงเล็บปิด ")" ข้างในคำของ arguments ยกเว้นแต่ว่าเป็นวงเล็บปิดสำหรับ arguments ยกตัวอย่างเช่น: @random ("foo", "bar", "@eval (4 + 5)", "yatta") สามารถใช้ได้, @random ("foo", "bar", ":-)", "yatta") ไม่สามารถใช้ได้.

ถ้ามี bugs อื่นๆ อีก กรูณารายงานมาได้ที่ Aracho ผู้ใช้มาโครต้องรับผิดชอบในการใช้เอง เราไม่รับรองใดๆ ทั้งสิ้นว่า สคริปต์นี้จะใช้ได้อย่างที่ได้อธิบายไปแล้วหรือไม่ ถ้าสมมุติว่าจากตัวอย่างแล้วกลายเป็นซื้อ 10.000 main gauche ทางเราจะไม่รับผิดชอบใดๆ ทั้งสิ้น (จริงๆ แล้วมันไม่เกิดขี้นหรอก แต่เพื่อความปลอดภัยไว้ก่อน..^^). หวังเป็นอย่างยิ่งว่าผู้ใช้ทุกคนจะสนุกกับการนำไปประยุกต์ใช้งาน

ดาวน์โหลด

Firefox กับเมนู Google เพื่อจะได้เปิดเวปได้ดีกว่า
ดาวน์โหลดมาโครปลั๊กอินเวอร์ชั่น 2.0.2 สำหรับ OpenKore/VisualKore 2.0.5 หรือสูงกว่า
ดาวน์โหลดมาโครปลั๊กอินเวอร์ชั่น 1.3.5 สำหรับ OpenKore/VisualKore 1.9.x ถึง 2.0.0
ดาวน์โหลดมาโครปลั๊กอินเวอร์ชั่น 1.2.0 สำหรับ openkore และ visualkore ถึง 1.6.9

ดูรายละเอียดเพิ่มเติมได้ที่ โพสต์ข้อมูลในกระทู้ สำหรับข้อมูลเกี่ยวกับการติดตั้ง ปลั๊กอิน

เวอร์ฃั่นที่มีการพัฒนา (SVN)

เวอร์ฃั่นที่มีการพัฒนาสามารถหาได้จากใน OpenKore SVN repository.

ผู้ใช้ Windows ควรอ่านเพิ่มเติมในthe SVN guide.

ผู้ใช้ Linux สามารถรันคำสั่งเพื่อรับ เวอร์ชั่นที่มีการพัฒนา SVN ดังต่อไปนี้:

svn co https://svn.sourceforge.net/svnroot/openkore/macro/trunk/

Use https://openkore.svn.sourceforge.net/svnroot/openkore/macro/tags/ to checkout older releases.
Currently available:

เพิ่มเติม

เวอร์ชั่นใน SVN จะมีสองไฟล์เพิ่มเติมขึ้นมา:

recorder.pl
เป็นปลั๊กอินเดี่ยวๆ สำหรับ openkore ที่ใช้ในการบันทึก (commandline เท่านั้น).

mconv.pl
โปรแกรม (ยังไม่สมบูรณ์) เปลี่ยนจากเวอร์ชั่น 0.8.x และ 0.9.x มาโครเป็น 1.x.x.

คำถามที่ถามกันบ่อยๆ

ช่วยด้วย! ฉันติดตั้งมาโครปลั๊กอินแต่ไม่เห็นมีมาโครของฉันเลย

ตรวจดูว่าผู้ใช้จัดเก็บไฟล์มาโครไปยัง macros.txt. บางครั้ง Windows Explorer ซ่อนนามสกุลของไฟล์เช่น txt ดังนั้นโปรดตรวจดูว่าผู้ใช้ไม่ได้ตั้งชื่อไฟล์ในลักษณะ macros.txt.txt

ช่วยด้วย! Openkore ให้ค่าผิดพลาดของโปรแกรม perl บางโปรแกรมแล้วสุดท้ายก็ขึ้นมากว่า "a plugin failed to load"!

ไม่ควร อย่าจัดเก็บ macros/automacros ไว้ในไฟล์ .pl file ในโฟลเดอร์ plugins ให้ใส่ไฟล์เหล่านี้ไว้ใน field ที่เรียกว่า macros.txt.

ฉันมีมาโครที่ทำงานได้ดีใน macro 0.9.x, แต่ตอนนี้ฉันได้รับแต่ข้อความ syntax errors.

ได้มีการเปลี่ยน syntax ไปจาก macro 1.0.0 อ่านคู่มือศึกษา syntax ใหม่ๆ มาโครเวอร์ชั่น 0.8.x และ 0.9.x สามารถเปลี่ยนกลับมาใช้ mconv.pl utility.

โอ๊ยโหย๋! ฉันได้รับข้อความว่า "Can't locate encoding.pm"!

  • ถ้าผู้ใช้ ใช้ OpenKore ให้ upgrade ไปใช้เวอร์ชั่น OpenKore 1.9.1 หรือสูงกว่า
  • ถ้าผู้ใช้ใช้ VisualKore ให้ upgrade ไปใช้เวอร์ชั่น VisualKore 1.9.2 หรือสูงกว่า

OpenKore/VisualKore 1.6.x ไม่สามารถใช้ได้กับ Macro Plugin version 1.3.0.

แล้วฉ้นจะไปหามาโครที่ทำงานนี้ได้ที่ไหน [insert feature here]?

ค้นหาได้ใน forum ถ้าไม่สามารถหามาโครที่ตรงตามต้องการได้ ให้พยายามเขียนขึ้นมาเอง ไม่มีการเขียนป้อนให้เด็ดขาด

ฉันมี automacro ตัวนึงเอาไว้ตรวจสอบจำนวนไอเทมในช่อง inventory / จำนวนในรถเข็นน้อยกว่าค่าที่ตั้งไว้หรือเท่ากับศูนย์ (ตัวอย่างเช่น ใน inventory "red potion" <= 30)แต่ปรากฎว่าพอเปลี่ยนแผนที่ ก็ triggers เช่นกันเกิดอะไรขี้น ทำไมถึงเป็นเช่นนั้น แล้วฉันควรทำอย่างไร?

เมื่อบอทเปลี่ยนแผนที่ไอเทมทุกชนิดจะหายไปจากช่อง inventory แปปนึงชั่วคราว ใน servers หลักต่างๆ ก็เกิดขึ้นด้วยเช่นกันเพื่อเป็นการหลีกเลี่ยงให้เพิ่มการตรวจสอบสำหรับไอเทมที่บอทจะติดตัวด้วย อาทิเช่น inventory "Jellopy" > 0

ฉันถูกตัดออกจากเซิฟเวอร์เมื่อมาโครกำลังทำงาน

การส่งคำสั่งทำงานเร็วเกินไป. เพิ่มเวลา macro_delay หรือใส่ pause ระหว่างบรรทัด คำสั่ง do

ฉันได้รับข้อความผิดพลาดจากโปรแกรม ฉันควรทำอย่างไร

ส่วนประกอบของ Openkore อาจจะมีการเปลี่ยนแปลงเพราะว่ารุ่นล่าสุดของมาโครปลั๊กอิน เริ่ม โดยการอัพเดรต openkore ของคุณ ต่อไป นำมาโครปลั๊กอินเวอร์ชั่นล่าสุดจาก SVN มาติดตั้ง ถ้ามันยังไม่ช่วยอะไร ค้นหาคำอธิบายข้อผิดพลาดที่เกิดขึ้นในบอร์ด ไม่ควรค้นหาคำที่ไม่ใช่คำจำกัดความ หรือ บางสิ่งที่ำเหมือนกับสิ่งนั้น ยังไม่โชคดี ถ้าอย่างนั้นขอความช่วยเหลือ แต่ควรเลือกหัวข้อที่เหมาะสม

กระดานสนทนา

สำหรับการสนทนาและถามตอบปัญหา กรุณาไปที่