วิธีเพิ่ม Script FiveM ใน server.cfg
วิธีเพิ่ม Script FiveM ใน server.cfg หลัก ๆ คือ นำ Resource ไปวางไว้ในโฟลเดอร์ resources ให้ถูกต้อง จากนั้นเพิ่มคำสั่ง ensure ชื่อ-resource ลงใน server.cfg โดยต้องตรวจสอบ ชื่อ Resource, Dependency และลำดับการ Start ให้ถูกต้องด้วย
ตัวอย่างง่ายที่สุด หากมี Resource ชื่อ my-script
resources/
└── my-script/
├── fxmanifest.lua
├── client.lua
└── server.lua
ให้เพิ่มใน server.cfg
ensure my-script
เมื่อ FXServer เปิดใหม่ FiveM จะพยายาม Start Resource my-script ให้อัตโนมัติ
แต่ Server RP ที่ใช้ ESX, QBCore, Qbox, ox_lib, oxmysql หรือ Script จำนวนมาก จะต้องจัดลำดับ Resource ให้เหมาะสม ไม่เช่นนั้นอาจเกิดปัญหา Script ไม่ทำงาน, Missing Dependency หรือ No Such Export ได้
① server.cfg คืออะไร
server.cfg คือไฟล์ Configuration หลักที่ใช้กำหนดค่าต่าง ๆ ของ FXServer
ภายในไฟล์สามารถมีคำสั่งหลายประเภท เช่น
endpoint_add_tcp "0.0.0.0:30120"
endpoint_add_udp "0.0.0.0:30120"
sv_hostname "My FiveM Server"
ensure chat
ensure spawnmanager
ensure my-script
สำหรับบทความนี้ เราจะสนใจส่วนที่ใช้สั่งเปิด Resource เป็นหลัก
โดย Resource ที่ถูกกำหนดด้วย ensure ใน server.cfg จะถูกเรียกให้ทำงานเมื่อ Server อ่าน Configuration นี้ตอนเริ่มต้น
② ก่อนเพิ่ม Script ใน server.cfg ต้องทำอะไรก่อน
อย่าเริ่มด้วยการเขียน
ensure my-script
ทันทีหาก Resource ยังไม่ได้ถูกติดตั้ง
ควรตรวจตามลำดับดังนี้
ดาวน์โหลด Script
↓
แตกไฟล์
↓
ตรวจโครงสร้าง Resource
↓
ตรวจ fxmanifest.lua
↓
วางไว้ใน resources
↓
ติดตั้ง Dependency
↓
ตั้ง Config
↓
เพิ่ม ensure ใน server.cfg
ตัวอย่าง Resource ที่ถูกต้อง
resources/
└── my-script/
├── fxmanifest.lua
├── client/
├── server/
└── config.lua
ถ้า Resource ไม่มี Manifest ในตำแหน่งที่ FiveM คาดหวัง การเพิ่ม ensure เพียงอย่างเดียวก็ไม่ทำให้ Script ใช้งานได้
③ วิธีเพิ่ม Script FiveM ใน server.cfg
สมมติ Script มีชื่อโฟลเดอร์ว่า
my-script
และอยู่ที่
resources/my-script/
เปิดไฟล์
server.cfg
จากนั้นเพิ่ม
ensure my-script
บันทึกไฟล์ แล้ว Restart Server
เท่านี้คือหลักการพื้นฐาน
โครงสร้างจะเป็นประมาณนี้
FXServer
│
├── resources/
│ └── my-script/
│ └── fxmanifest.lua
│
└── server.cfg
และภายใน server.cfg
ensure my-script
เมื่อ Server เปิด FiveM จะอ่านคำสั่งนี้และพยายาม Start Resource ที่ชื่อ my-script
④ ต้องใช้ชื่อไหนใน ensure
ให้ใช้ ชื่อ Resource ที่ FiveM รู้จัก ซึ่งโดยทั่วไปสัมพันธ์กับชื่อโฟลเดอร์ Resource
ตัวอย่างมีโฟลเดอร์
resources/
└── policejob/
ให้ใช้
ensure policejob
ถ้ามี
resources/
└── my-garage/
ใช้
ensure my-garage
ข้อผิดพลาดที่พบได้บ่อยคือชื่อใน server.cfg ไม่ตรงกับ Resource
เช่นโฟลเดอร์จริงคือ
qb-policejob
แต่เขียน
ensure policejob
FiveM ก็อาจหา Resource นั้นไม่พบ
ดังนั้นเมื่อเจอ Error ประเภท Couldn't Find Resource สิ่งแรกที่ควรตรวจคือ ชื่อ Resource
⑤ ระวังโฟลเดอร์ Script ซ้อนกัน
อีกปัญหาที่เกิดบ่อยมากคือแตก ZIP แล้วได้โครงสร้างแบบนี้
resources/
└── my-script/
└── my-script/
├── fxmanifest.lua
├── client.lua
└── server.lua
จากนั้นเพิ่ม
ensure my-script
แต่ FiveM ไม่พบ Manifest ในระดับ Resource ที่ถูกต้อง
โครงสร้างควรเป็น
resources/
└── my-script/
├── fxmanifest.lua
├── client.lua
└── server.lua
ก่อนแก้ server.cfg จึงควรตรวจตำแหน่ง fxmanifest.lua ด้วยทุกครั้ง
⑥ ensure คืออะไร
คำสั่งที่นิยมใช้มากที่สุดใน server.cfg คือ
ensure resource_name
ตัวอย่าง
ensure ox_lib
ensure my-script
พฤติกรรมของ ensure คือ
ถ้า Resource ยังไม่ทำงาน → Start
ถ้า Resource ทำงานอยู่แล้ว → Restart
จึงเหมาะกับการใช้ใน Configuration ของ Server และเป็นรูปแบบที่พบได้ทั่วไปในตัวอย่างของ FiveM
⑦ ensure กับ start ต่างกันอย่างไร
สามารถพบทั้ง
start my-script
และ
ensure my-script
แต่สองคำสั่งนี้มีพฤติกรรมต่างกัน
start
start my-script
ใช้ Start Resource หาก Resource ยังหยุดอยู่
ensure
ensure my-script
ถ้า Resource หยุดอยู่จะ Start และถ้ากำลังทำงานอยู่จะ Restart
ดังนั้นสำหรับ server.cfg สมัยใหม่ การใช้
ensure my-script
มักสะดวกกว่า
อย่างไรก็ตาม หาก Script มี Documentation ระบุวิธีติดตั้งไว้โดยเฉพาะ ควรปฏิบัติตามคู่มือนั้นก่อน
⑧ ลำดับ ensure สำคัญหรือไม่
สำคัญมากสำหรับ Resource ที่มี Dependency
สมมติ my-script ต้องใช้ ox_lib
ควรเรียง
ensure ox_lib
ensure my-script
มากกว่า
ensure my-script
ensure ox_lib
เพราะเมื่อ my-script เริ่มทำงาน มันอาจพยายามเรียก Function หรือ Export จาก ox_lib ทันที
ถ้า Dependency ยังไม่พร้อม Script อาจเกิด Error
หลักง่าย ๆ คือ
Database Connector
↓
Library
↓
Framework
↓
ระบบพื้นฐาน
↓
Script ที่พึ่งพาระบบเหล่านั้น
แต่ลำดับจริงต้องตรวจจาก Documentation ของ Framework และ Script ที่ใช้งาน
⑨ ตัวอย่าง server.cfg ที่มี oxmysql และ ox_lib
สมมติ Script หนึ่งต้องใช้ oxmysql และ ox_lib
อาจเรียงประมาณนี้
ensure oxmysql
ensure ox_lib
ensure my-script
หาก my-script ใช้ Framework เพิ่มด้วย อาจมีโครงสร้างเชิงแนวคิดเป็น
ensure oxmysql
# Framework
ensure framework-resource
# Libraries
ensure ox_lib
# Custom Scripts
ensure my-script
อย่า Copy ลำดับนี้ไปใช้กับทุก Server แบบตายตัว เพราะ Framework แต่ละตัวมี Resource และ Requirements แตกต่างกัน
สิ่งที่ถูกต้องที่สุดคือดู Dependency ของ Resource แต่ละตัว
⑩ เพิ่ม Script ESX ใน server.cfg อย่างไร
ถ้า Script เป็น ESX Script ต้องตรวจว่า ESX Core ที่ Script ต้องใช้ทำงานอยู่ก่อน
ตัวอย่างเชิงโครงสร้าง
ensure oxmysql
ensure [esx]
ensure my-esx-script
หรือ Server บางชุดอาจ Start ESX Resources แยกเป็นรายตัว
ประเด็นสำคัญไม่ใช่ว่าต้องใช้รูปแบบเดียวกันทุก Server แต่คือ ESX Dependency ต้องพร้อมก่อน Script ที่เรียกใช้ ESX
ถ้า Script ใช้ ox_lib เพิ่มด้วย ก็ต้องตรวจ Dependency ตัวนั้นเช่นกัน
อย่าเห็นชื่อ Script มีคำว่า ESX แล้วคิดว่าเพียงเพิ่ม
ensure my-esx-script
ก็จบ เพราะ Script อาจต้องการ Resource เพิ่มอีกหลายตัว
⑪ เพิ่ม Script QBCore ใน server.cfg อย่างไร
หลักการเดียวกันใช้กับ QBCore
Resource ที่ต้องใช้ QBCore ควรทำงานหลัง Core และ Dependency ที่จำเป็นพร้อมแล้ว
ตัวอย่างเชิงแนวคิด
ensure oxmysql
ensure qb-core
ensure my-qb-script
แต่ QBCore Server จริงอาจมีการจัด Resource เป็น Category เช่น
ensure [qb]
จึงต้องดูโครงสร้าง Server ที่ใช้จริง
ถ้า Script ต้องใช้ qb-target, Inventory หรือ Resource อื่น ก็ต้องจัดให้ Dependency พร้อมก่อนเช่นกัน
⑫ เพิ่ม Script Qbox ใน server.cfg อย่างไร
Qbox Server ก็ใช้แนวคิด Resource Dependency เช่นเดียวกัน
อย่าเพียงนำ Qbox Script ไปไว้ใน resources แล้วสั่ง
ensure my-qbox-script
โดยไม่ตรวจ Requirements
Script อาจต้องใช้ Resource เช่น
oxmysql
ox_lib
qbx_core
ox_inventory
ox_target
ขึ้นอยู่กับ Script
ดังนั้นลำดับใน server.cfg ต้องยึดตาม Dependency ของ Qbox และ Resource ที่ติดตั้งจริง
โดยเฉพาะ Script ที่ถูกแปลงมาจาก QBCore ควรตรวจ Compatibility เพิ่ม ไม่ควรคิดว่า Script QBCore ทุกตัวสามารถใส่ Qbox แล้วทำงานได้ 100% โดยไม่ตรวจสอบ
⑬ สามารถ ensure ทั้งโฟลเดอร์ได้หรือไม่
FiveM รองรับการจัด Resource เป็น Category ด้วยโฟลเดอร์ที่มีวงเล็บเหลี่ยม
ตัวอย่าง
resources/
└── [jobs]/
├── policejob/
├── ambulancejob/
└── mechanicjob/
สามารถสั่ง Resource Category ได้ เช่น
ensure [jobs]
แทนการเขียน
ensure policejob
ensure ambulancejob
ensure mechanicjob
ทีละตัว
วิธีนี้ช่วยให้ server.cfg สั้นและจัดการง่ายขึ้น โดยเฉพาะ Server ที่มี Resource จำนวนมาก
⑭ ตัวอย่างการจัด Resource เป็นหมวด
Server RP ขนาดใหญ่สามารถจัดโครงสร้างประมาณนี้
resources/
├── [core]/
├── [framework]/
├── [ox]/
├── [jobs]/
├── [phone]/
├── [vehicles]/
├── [maps]/
└── [standalone]/
จากนั้นใน server.cfg อาจมี
ensure [core]
ensure [framework]
ensure [ox]
ensure [jobs]
ensure [phone]
ensure [vehicles]
ensure [maps]
ensure [standalone]
แต่ต้องระวังเรื่อง Dependency
การจัดทุกอย่างเป็น Category แล้วสั่ง ensure ทั้งหมดไม่ได้หมายความว่าลำดับภายในจะเหมาะกับ Script ทุกตัวโดยอัตโนมัติ
Resource สำคัญที่ต้อง Start ก่อนตัวอื่นควรได้รับการจัดโครงสร้างและทดสอบอย่างชัดเจน
⑮ ควรจัด server.cfg อย่างไรให้อ่านง่าย
เมื่อ Server มี Script หลายสิบหรือหลายร้อยตัว หากเขียน ensure ปะปนกันทั้งหมดจะดูแลยากมาก
ตัวอย่างที่อ่านยาก
ensure police
ensure map01
ensure oxmysql
ensure phone
ensure ox_lib
ensure car01
ensure framework
ensure garage
ควรจัดหมวดให้ชัดเจนกว่า เช่น
# Database
ensure oxmysql
# Framework
ensure framework
# Libraries
ensure ox_lib
# Jobs
ensure police
ensure ambulance
# Systems
ensure phone
ensure garage
# Maps
ensure map01
# Vehicles
ensure car01
เพียงจัด Configuration ให้เป็นระบบ ก็ช่วยให้ Debug ได้เร็วขึ้นมาก
⑯ Comment ใน server.cfg ใช้อย่างไร
สามารถใช้ # เพื่อใส่ Comment ใน server.cfg
ตัวอย่าง
# Database
ensure oxmysql
# Libraries
ensure ox_lib
# Custom Scripts
ensure my-script
Comment ช่วยอธิบายว่า Resource แต่ละกลุ่มคืออะไร
นอกจากนี้ยังสามารถใช้ Comment เพื่อปิดคำสั่งชั่วคราว
จาก
ensure my-script
เป็น
# ensure my-script
จากนั้น Restart Server
วิธีนี้มีประโยชน์มากเมื่อต้องการทดสอบว่า Resource ตัวใดเป็นต้นเหตุของปัญหา
⑰ เพิ่ม Resource ใหม่โดยไม่ Restart Server ได้หรือไม่
ได้
ถ้า Server กำลังเปิดอยู่และเพิ่งเพิ่ม Resource ใหม่เข้า resources ให้เปิด Server Console แล้วใช้
refresh
คำสั่งนี้จะสแกน Resource Folder และ Manifest ใหม่
จากนั้นใช้
ensure my-script
หาก Resource ถูกต้องก็สามารถ Start ได้โดยไม่ต้อง Restart FXServer ทั้งเครื่อง
ขั้นตอนคือ
เพิ่ม Resource
↓
refresh
↓
ensure my-script
↓
ตรวจ Console
↓
เข้าเกมทดสอบ
แต่ถ้าต้องการให้ Resource เปิดอัตโนมัติหลัง Server Restart ในอนาคต อย่าลืมเพิ่ม
ensure my-script
ไว้ใน server.cfg ด้วย
⑱ ใช้ txAdmin เพิ่มหรือ Start Script ได้หรือไม่
txAdmin สามารถช่วยจัดการ Resource ได้เช่นกัน
สำหรับ Resource ใหม่ สามารถใช้เครื่องมือ Resources ของ txAdmin เพื่อ Reload/Refresh แล้วค้นหา Resource และ Start ได้
วิธีนี้สะดวกสำหรับการทดสอบ Script
แต่มีข้อแตกต่างสำคัญระหว่าง
Start Resource ตอนนี้
กับ
กำหนดให้ Resource Start อัตโนมัติทุกครั้ง
ถ้าต้องการให้ Script ทำงานหลัง Server Restart ทุกครั้ง ควรกำหนดการ Start ของ Resource ใน Configuration ที่ Server ใช้งาน เช่น server.cfg หรือไฟล์ Config ที่ถูก exec จากมัน
⑲ server.cfg สามารถแยกเป็นหลายไฟล์ได้หรือไม่
ได้
FiveM มีคำสั่ง
exec filename.cfg
เพื่อเรียกคำสั่งจาก Configuration File อื่น
ตัวอย่างใน server.cfg
exec resources.cfg
แล้วสร้าง
resources.cfg
ภายในอาจมี
ensure oxmysql
ensure ox_lib
ensure my-script
วิธีนี้มีประโยชน์มากเมื่อ server.cfg เริ่มยาว
ตัวอย่างการแบ่งอาจเป็น
server.cfg
resources.cfg
permissions.cfg
แล้วให้ server.cfg เรียกไฟล์ที่ต้องการ
อย่างไรก็ตาม มือใหม่ไม่จำเป็นต้องแยกทันที หาก Server ยังมี Resource ไม่มาก เพราะการมีหลาย Config File โดยไม่เข้าใจว่าไฟล์ไหนถูก exec อาจสร้างความสับสนแทน
⑳ เพิ่ม ensure แล้ว Script ไม่ทำงาน แก้อย่างไร
ถ้าเพิ่ม
ensure my-script
แล้ว Resource ไม่ทำงาน ให้ตรวจตามลำดับนี้
1. Resource อยู่ใน resources หรือไม่
ตัวอย่าง
resources/my-script/
2. มี fxmanifest.lua หรือไม่
ควรอยู่ประมาณนี้
resources/my-script/fxmanifest.lua
3. ชื่อใน server.cfg ถูกหรือไม่
ensure my-script
ต้องตรงกับ Resource ที่ต้องการ Start
4. มีโฟลเดอร์ซ้อนหรือไม่
ผิด:
my-script/my-script/fxmanifest.lua
5. Dependency ครบหรือไม่
ตรวจ Documentation ของ Script
6. ลำดับ ensure ถูกหรือไม่
Dependency ควรพร้อมก่อน Resource ที่เรียกใช้มัน
7. Console แจ้ง Error อะไร
อ่านข้อความจริงก่อนแก้
คำที่ควรสังเกต เช่น
Couldn't find resource
Missing dependency
SCRIPT ERROR
No such export
ข้อความเหล่านี้ช่วยชี้ว่าควรตรวจส่วนใดต่อ
㉑ ทำไม Restart Server แล้ว Script หาย
ถ้าคุณใช้ Console สั่งเพียง
ensure my-script
Resource จะทำงานในรอบ Server นั้น
แต่ถ้าไม่ได้กำหนดให้มัน Start ผ่าน Configuration ที่ถูกโหลดตอน Server เปิด เมื่อ Restart Server Resource อาจไม่ได้ถูกเรียก Start อีก
วิธีแก้คือเพิ่มลงใน server.cfg
ensure my-script
บันทึกไฟล์ แล้ว Restart Server ทดสอบอีกครั้ง
นี่เป็นข้อแตกต่างที่มือใหม่ควรเข้าใจระหว่าง การ Start Resource ชั่วคราวจาก Console กับ การกำหนด Startup Configuration
㉒ เพิ่ม Script แล้ว Server Error ควรทำอะไร
ถ้า Server ปกติดีก่อนติดตั้ง Script แต่เกิดปัญหาหลังเพิ่ม
ensure new-script
อย่าเริ่มแก้ Framework ทั้ง Server ทันที
ให้ Comment Resource ใหม่ก่อน
# ensure new-script
แล้ว Restart Server
หาก Server กลับมาปกติ ให้ตรวจ Resource ล่าสุดโดยเฉพาะ
ดู
Documentation
Dependency
Config
SQL
Framework
Manifest
Console Error
Compatibility
วิธีนี้ช่วยจำกัดขอบเขตของปัญหาได้รวดเร็วมาก
㉓ อย่าใส่ ensure ซ้ำโดยไม่จำเป็น
ตัวอย่างที่ไม่ควรมี
ensure my-script
# ด้านล่างของไฟล์อีกครั้ง
ensure my-script
หรือ Start ทั้ง Category แล้ว Start Resource ตัวเดิมซ้ำโดยไม่เข้าใจเหตุผล
ensure [jobs]
ensure policejob
ทั้งที่ policejob อยู่ภายใน [jobs] อยู่แล้ว
แม้บางกรณีจะไม่ทำให้ Server พังทันที แต่ทำให้ Configuration สับสน และสร้างพฤติกรรม Restart ที่ไม่จำเป็นได้
ควรเลือกโครงสร้างให้ชัดว่าต้องการ Start เป็น Category หรือราย Resource
㉔ อย่าใส่ Script ทุกตัวไว้บนสุดของ server.cfg
ลำดับ Resource ควรสะท้อน Dependency
ไม่ควรทำ
ensure my-phone
ensure my-garage
ensure oxmysql
ensure framework
ensure ox_lib
หาก Script เหล่านั้นต้องใช้ Resource ด้านล่าง
แนวคิดที่อ่านง่ายกว่าคือ
# Database
ensure oxmysql
# Framework / Core
ensure framework
# Libraries
ensure ox_lib
# Gameplay Systems
ensure my-phone
ensure my-garage
ไม่ได้หมายความว่าทุก Server ต้องใช้ลำดับนี้ แต่หลักการคือ ตัวที่ถูกพึ่งพาควรพร้อมก่อนตัวที่พึ่งพามัน
㉕ ตัวอย่าง server.cfg สำหรับมือใหม่
สมมติมี Server แบบง่าย ๆ
resources/
├── [core]/
├── [jobs]/
├── oxmysql/
├── ox_lib/
└── my-phone/
สามารถจัดส่วน Resource ของ server.cfg ประมาณนี้
# Database
ensure oxmysql
# Core Resources
ensure [core]
# Libraries
ensure ox_lib
# Jobs
ensure [jobs]
# Phone
ensure my-phone
จากนั้นเปิด Server และตรวจ Console ตั้งแต่ต้นจน Resource ตัวสุดท้าย Start
ถ้าเจอ Error อย่ารีบข้าม เพราะ Error ของ Resource แรกสามารถทำให้ Resource ที่ Start ภายหลังมีปัญหาตามมาได้
㉖ Checklist เพิ่ม Script FiveM ใน server.cfg
ก่อน Restart Server ตรวจให้ครบ
Resource
Script อยู่ใน
resourcesไม่มีโฟลเดอร์ซ้อนผิด
มี
fxmanifest.luaชื่อ Resource ถูกต้อง
Dependency
Framework ตรง
Library ครบ
Database Resource พร้อม
Resource ที่จำเป็นติดตั้งแล้ว
server.cfg
เพิ่ม
ensure resource_nameสะกดชื่อถูก
ไม่มี
ensureซ้ำโดยไม่จำเป็นลำดับ Dependency ถูก
บันทึกไฟล์แล้ว
หลังเปิด Server
Resource Start สำเร็จ
Server Console ไม่มี Error สำคัญ
Client F8 ไม่มี Error
ระบบใช้งานในเกมได้
Restart Server แล้วยังทำงาน
ถ้าผ่านทั้งหมด Script จึงถือว่าถูกเพิ่มเข้าสู่ Server อย่างสมบูรณ์ในระดับพื้นฐาน
สรุปวิธีเพิ่ม Script FiveM ใน server.cfg
วิธีเพิ่ม Script FiveM ใน server.cfg ที่ถูกต้องคือ นำ Resource ไปไว้ใน resources ตรวจว่า Resource มี Manifest และ Dependency ครบ แล้วเพิ่ม
ensure resource_name
ตัวอย่าง
ensure oxmysql
ensure ox_lib
ensure my-script
สิ่งที่สำคัญไม่แพ้การเขียน ensure คือ ลำดับการ Start เพราะ Script จำนวนมากพึ่งพา Framework, Library, Database หรือ Resource ตัวอื่น
หากเพิ่ม Script แล้วไม่ทำงาน ให้ตรวจชื่อ Resource, โครงสร้าง Folder, fxmanifest.lua, Dependency และ Server Console ก่อนแก้ Code
สำหรับ Server ที่มี Resource จำนวนมาก comsiam แนะนำให้แบ่งส่วน server.cfg เป็นหมวด เช่น Database, Framework, Library, Jobs, Systems, Maps และ Vehicles เพื่อให้ตรวจสอบง่ายและลดความผิดพลาดในอนาคต
และเมื่อจะเพิ่ม Script ใหม่บน Server จริง แนวทางของ comsiam คือเพิ่มทีละ Resource แล้วทดสอบทันที อย่าเพิ่ม Script จำนวนมากพร้อมกัน เพราะหากเกิด Error จะหาต้นเหตุได้ยากกว่ามาก
Comments
Post a Comment