FiveM Script Error แก้อย่างไร
FiveM Script Error แก้ได้เร็วที่สุดเมื่อ อ่านข้อความ Error ให้ถูกก่อนลงมือแก้ เพราะ Error ของ FiveM มักระบุชื่อ Resource, ชื่อไฟล์, เลขบรรทัด และสาเหตุบางส่วนเอาไว้แล้ว หากรู้วิธีอ่านจะช่วยลดเวลาจากการลองผิดลองถูกอย่างมาก
ตัวอย่าง Error อาจมีลักษณะประมาณนี้
SCRIPT ERROR: @my-script/server/main.lua:125: attempt to index a nil value
จากข้อความนี้เรารู้ทันทีว่า
Resource = my-script
File = server/main.lua
Line = 125
Error = attempt to index a nil value
จุดเริ่มต้นจึงไม่ใช่การ Restart Server หรือล้าง Cache แต่คือการตรวจ Error แรกที่เกี่ยวข้องกับ Resource นั้น แล้วไล่หาต้นเหตุอย่างเป็นระบบ
วิธีตรวจแบบรวดเร็วคือ
อ่านข้อความ Error
↓
ดู Resource
↓
ดูชื่อไฟล์
↓
ดูเลขบรรทัด
↓
แยกว่า Client หรือ Server
↓
ตรวจ Dependency
↓
ตรวจ Config / Framework
↓
ตรวจ Database
↓
แก้ทีละจุด
↓
Restart Resource และทดสอบ
① SCRIPT ERROR ใน FiveM คืออะไร
SCRIPT ERROR หมายถึงมีบางอย่างผิดพลาดระหว่าง Runtime กำลังประมวลผล Script
Error อาจเกิดจาก
Lua Code ผิด
ตัวแปรไม่มีค่า
Function ไม่มีอยู่
Resource อื่นไม่ทำงาน
Export ไม่พบ
Event ส่งข้อมูลผิด
Config ไม่ครบ
Dependency ไม่พร้อม
Database Error
Framework ไม่ตรง
Script คนละ Version
API เปลี่ยนหลัง Update
ดังนั้นคำว่า SCRIPT ERROR ไม่ได้หมายความว่า FiveM ทั้งระบบเสีย
หลายครั้งมีเพียง Resource เดียวที่เกิดปัญหา
ตัวอย่างเช่น
SCRIPT ERROR: @garage/server/main.lua:87
ควรเริ่มตรวจ Resource garage ก่อน ไม่จำเป็นต้องแก้ FXServer ทั้งหมด
② วิธีอ่าน FiveM Script Error
สมมติ Console แสดง
SCRIPT ERROR: @my-script/client/main.lua:42: attempt to call a nil value
สามารถแยกได้เป็น
Resource
my-script
File
client/main.lua
Line
42
Error
attempt to call a nil value
ให้เปิดไฟล์
my-script/client/main.lua
แล้วดูบริเวณบรรทัด 42
แต่อย่าดูแค่บรรทัดเดียว ควรดู Code ก่อนหน้าและหลังประมาณหนึ่งช่วง เพราะต้นเหตุอาจเกิดจากตัวแปรที่ถูกกำหนดไว้ก่อนหน้านั้น
③ หา Error แรก ไม่ใช่ Error สุดท้าย
นี่เป็นเทคนิคสำคัญมาก
บางครั้ง Console อาจขึ้น Error ต่อกันหลายสิบรายการ
ตัวอย่าง
Error A
Error B
Error C
Error D
Error E
แต่จริง ๆ แล้ว Error B–E อาจเป็นผลต่อเนื่องจาก Error A
ตัวอย่าง
ox_lib ไม่ทำงาน
↓
Script A เรียก ox_lib ไม่ได้
↓
Script B ที่ใช้ Script A Error
↓
Script C ที่ใช้ Script B Error
ถ้าไปแก้ Error ตัวสุดท้ายก่อน อาจเสียเวลาโดยไม่จำเป็น
ให้เลื่อน Console ขึ้นแล้วค้นหา Error แรกที่เกิดก่อน Error ชุดใหญ่
แก้ Root Cause ก่อน แล้ว Restart Resource เพื่อดูว่า Error ที่เหลือหายไปหรือไม่
④ Server Error กับ Client Error ต่างกันอย่างไร
FiveM Script สามารถ Error ได้ทั้งฝั่ง Server และ Client
Server-side Error
มักเห็นใน Server Console หรือ txAdmin Console
เกี่ยวข้องกับงาน เช่น
Database
Player Data
Money
Item
Permission
Server Event
Callback
Framework
ตัวอย่าง
@my-script/server/main.lua
Client-side Error
มักเห็นใน F8 Console ของผู้เล่น
เกี่ยวข้องกับ
Marker
Target
Menu
UI
Animation
Vehicle
Ped
Client Event
Interaction
ตัวอย่าง
@my-script/client/main.lua
ดังนั้นถ้า Server Console สะอาด แต่กดเมนูแล้วไม่มีอะไรเกิดขึ้น ต้องตรวจ F8 ด้วย
⑤ วิธีเปิด F8 ดู FiveM Error
เข้า FiveM Server แล้วกด
F8
จะเปิด Client Console
จากนั้นทำสิ่งที่ทำให้ Script มีปัญหาอีกครั้ง
ตัวอย่าง
เปิด F8
↓
ปิด F8
↓
เดินไป Garage
↓
กดเปิด Garage
↓
เปิด F8 อีกครั้ง
↓
ดู Error ล่าสุด
วิธีนี้ช่วยเชื่อม Error กับ Action ที่เพิ่งทำได้ง่ายขึ้น
เอกสาร Cfx.re ปัจจุบันยังระบุว่า F8 เป็น Client Console สำหรับตรวจและ Debug ปัญหา Resource ได้
⑥ attempt to index a nil value คืออะไร
หนึ่งใน Lua Error ที่พบได้บ่อยคือ
attempt to index a nil value
ความหมายโดยง่ายคือ Code กำลังพยายามเข้าถึงข้อมูลบางอย่าง แต่ตัวแปรนั้นไม่มีค่าหรือเป็น nil
สมมติตัวอย่าง
local player = nil
print(player.job.name)
player ไม่มีข้อมูล แต่ Code พยายามอ่าน
player.job.name
จึง Error
ใน FiveM สาเหตุจริงอาจมาจาก
Player Data ยังโหลดไม่เสร็จ
Framework Object ไม่ได้
Job ไม่มี
Config ไม่มีค่า
Database ไม่คืนข้อมูล
Function คืนค่า
nilResource Dependency ยังไม่พร้อม
จึงไม่ควรแก้ด้วยการใส่ค่าแบบสุ่ม แต่ต้องหาว่า ทำไมตัวแปรถึงไม่มีค่า
⑦ attempt to call a nil value คืออะไร
Error อีกแบบคือ
attempt to call a nil value
หมายถึง Code พยายามเรียกบางสิ่งเหมือน Function แต่สิ่งนั้นไม่มีอยู่ในเวลานั้น
ตัวอย่าง
MyFunction()
แต่ไม่ได้ประกาศ MyFunction
หรือ Function มาจาก Resource อื่นที่ยังไม่ได้ Start
สาเหตุใน FiveM มักเกี่ยวข้องกับ
Function ชื่อผิด
File ที่ประกาศ Function ไม่ถูกโหลด
Dependency ยังไม่ Start
API เปลี่ยน
Script คนละ Version
Framework Function ไม่ตรง
Code โหลดผิดลำดับ
ให้ตรวจ fxmanifest.lua ว่าไฟล์ที่ประกาศ Function ถูกโหลดก่อนจุดที่เรียกใช้งานหรือไม่
⑧ attempt to concatenate a nil value แก้อย่างไร
อาจพบ Error
attempt to concatenate a nil value
มักเกิดเมื่อใช้ตัวดำเนินการต่อ String กับค่าที่เป็น nil
ตัวอย่าง
local playerName = nil
print('Player: ' .. playerName)
เพราะ playerName ไม่มีค่า จึงนำมาต่อกับ String ไม่ได้
ใน Server จริงต้องหาว่าค่าที่หายมาจากไหน เช่น
Player Name
Identifier
Config
Database
Job
Item Label
อาจใช้การตรวจค่าชั่วคราว เช่น
print(playerName)
เพื่อดูว่าตัวแปรได้ค่าอะไรจริง
⑨ No Such Export คืออะไร
Error ที่เจ้าของ FiveM Server พบค่อนข้างบ่อยคือ
No such export
โดยทั่วไปหมายถึง Resource หนึ่งกำลังเรียก Export ที่ Resource เป้าหมายไม่มีหรือยังไม่พร้อม
ตัวอย่างแนวคิด
garage
↓
เรียก Export
↓
inventory
↓
ไม่พบ Export
สิ่งที่ควรตรวจคือ
Resource เป้าหมาย Start หรือยัง
ชื่อ Resource ถูกหรือไม่
Export ชื่อถูกหรือไม่
Script Version ตรงกันหรือไม่
Dependency ถูก Update หรือไม่
API ถูกเปลี่ยนหรือยกเลิกหรือไม่
Start Order ถูกหรือไม่
FiveM รองรับ Exports เพื่อให้ Resource เรียก Function ข้าม Resource ได้ ดังนั้น Error นี้มักเป็นเรื่อง Compatibility หรือ Dependency มากกว่าปัญหา Network
⑩ Missing Dependency แก้อย่างไร
ถ้า Console แจ้งว่า Resource ขาด Dependency ให้ตรวจ fxmanifest.lua
อาจพบ
dependency 'ox_lib'
หรือ
dependencies {
'ox_lib',
'oxmysql'
}
จากนั้นตรวจว่า Resource เหล่านั้น
มีอยู่ใน
resourcesหรือไม่ถูก Start หรือไม่
ชื่อถูกหรือไม่
Version รองรับหรือไม่
ตัวอย่างใน server.cfg
ensure oxmysql
ensure ox_lib
ensure my-script
อย่าแก้ด้วยการลบ dependency ออกจาก Manifest เพียงเพื่อให้ Error หาย เพราะหาก Code ใช้ Dependency จริง Script ก็ยังทำงานไม่ได้อยู่ดี
⑪ Couldn't Find Resource แก้อย่างไร
ถ้าขึ้นประมาณ
Couldn't find resource my-script
ตรวจตามนี้
ชื่อ Folder
resources/my-script/
มีจริงหรือไม่
Manifest
resources/my-script/fxmanifest.lua
อยู่ถูกระดับหรือไม่
server.cfg
เขียน
ensure my-script
ตรงกับชื่อ Resource หรือไม่
Folder ซ้อน
ผิด:
resources/my-script/my-script/fxmanifest.lua
ควรเป็น:
resources/my-script/fxmanifest.lua
ถ้าเพิ่งเพิ่ม Resource เข้า Server ที่กำลังเปิดอยู่ ให้ใช้
refresh
แล้วลอง
ensure my-script
ใหม่
⑫ does not have a resource manifest คืออะไร
หาก Console เตือนว่า Resource ไม่มี Manifest ให้ตรวจ
fxmanifest.lua
ว่าอยู่ภายใน Resource หรือไม่
โครงสร้างควรเป็น
my-script/
├── fxmanifest.lua
├── client.lua
└── server.lua
ไม่ใช่
my-script/
└── another-folder/
└── fxmanifest.lua
FiveM ปัจจุบันใช้ fxmanifest.lua เป็น Resource Manifest หลัก ส่วน __resource.lua เป็นรูปแบบเก่า
ดังนั้น Resource ใหม่ควรใช้ fxmanifest.lua
⑬ fxmanifest.lua Error แก้อย่างไร
หาก Error เกิดที่ Manifest ให้ตรวจ Syntax ก่อน
ตัวอย่าง
fx_version 'cerulean'
game 'gta5'
client_scripts {
'client/main.lua',
'client/menu.lua'
}
server_scripts {
'server/main.lua'
}
สิ่งที่ต้องตรวจ ได้แก่
Quote เปิด-ปิดครบ
{ }ครบ,ถูกตำแหน่งPath ถูก
File มีจริง
Directive สะกดถูก
ไม่มี Code แปลกที่ทำให้ Lua Parsing ล้มเหลว
อย่า Copy fxmanifest.lua จาก Resource อื่นมาทับโดยไม่เข้าใจ เพราะ Resource แต่ละตัวโหลดไฟล์และ Dependency ไม่เหมือนกัน
⑭ Lua 5.4 Error ต้องใส่ lua54 'yes' ไหม
สำหรับ FiveM ปัจจุบัน ไม่จำเป็นต้องเปิด Lua 5.4 ด้วย lua54 'yes' แล้ว
เอกสาร Cfx.re ระบุว่า Directive
lua54 'yes'
ถูก Deprecated และตั้งแต่เดือนมิถุนายน 2025 Lua Scripts ใช้ Lua 5.4 แล้ว
ดังนั้นถ้าเจอคู่มือเก่าที่บอกให้เพิ่ม
lua54 'yes'
เพื่อแก้ Script รุ่นใหม่ ควรตรวจ Documentation ปัจจุบันก่อน
ปัญหา Lua Compatibility ในปี 2026 ไม่ควรถูกแก้ด้วยคำแนะนำเก่าแบบอัตโนมัติ
⑮ Database Error แก้อย่างไร
ถ้า Script ใช้ Database อาจพบ Error เช่น
Table doesn't exist
Unknown column
Duplicate column
SQL syntax error
ให้ตรวจ
Database Connection
↓
Table
↓
Column
↓
SQL Migration
↓
Script Version
Table doesn't exist
มักเกิดจากยังไม่ได้ Import SQL หรือ Script ใช้ Database ผิดตัว
Unknown column
มักเกิดจาก Code ใหม่เรียก Column ที่ Database Schema เก่ายังไม่มี
Duplicate column
อาจเกิดจาก Import Migration ซ้ำ
ดังนั้นอย่า Import ไฟล์ .sql ทุกไฟล์ซ้ำเพื่อทดลอง เพราะอาจสร้างปัญหาเพิ่ม
⑯ oxmysql Error ต้องตรวจอะไร
ถ้าหลาย Script ขึ้น Database Error พร้อมกัน ให้ตรวจ oxmysql ก่อน
ตัวอย่าง
ensure oxmysql
ต้องตรวจว่า
Resource Start สำเร็จ
Database Connection ถูก
Database Server ทำงาน
Connection String ถูก
User Database มี Permission
Script Start หลัง Database พร้อม
หาก oxmysql มีปัญหา Script ที่ใช้ Database จำนวนมากอาจ Error พร้อมกัน
กรณีนี้ Root Cause อาจไม่ใช่ Phone, Garage หรือ Banking แต่เป็น Database Layer ตัวเดียว
⑰ Error หลังอัปเดต Script แก้อย่างไร
ถ้าก่อน Update ใช้งานได้ แต่หลัง Update Error ให้โฟกัสสิ่งที่เปลี่ยน
ตรวจ
Changelog
Breaking Changes
Config ใหม่
Dependency ใหม่
SQL Migration
Event เปลี่ยน
Export เปลี่ยน
Framework Requirement
Resource Name
ข้อผิดพลาดที่พบบ่อยคือดาวน์โหลด Version ใหม่แล้วนำ
config.lua เก่า
ไปทับ Config ใหม่ทั้งไฟล์
ค่าที่ Developer เพิ่มใน Version ใหม่จึงหาย
วิธีที่ปลอดภัยกว่าคือเปรียบเทียบ Config แล้ว Merge เฉพาะค่าที่เราปรับเอง
⑱ Error หลังอัปเดต Dependency
บางครั้ง Script หลักไม่ได้เปลี่ยน แต่ Error เกิดหลังอัปเดต
ox_lib
Inventory
Target
Framework
สาเหตุอาจเป็น API หรือ Export เปลี่ยน
ให้ตรวจว่า Script ที่ใช้อยู่รองรับ Dependency Version ใหม่หรือไม่
อย่าเห็น Error แล้ว Downgrade/Upgrade Resource หลายตัวพร้อมกัน เพราะจะทำให้หาต้นเหตุยากกว่าเดิม
เปลี่ยนทีละตัวและทดสอบทุกครั้ง
⑲ Error หลังเปลี่ยน ESX, QBCore หรือ Qbox
Framework เป็น Dependency สำคัญของ Script RP จำนวนมาก
ถ้า Script เดิมสร้างสำหรับ ESX แล้วเปลี่ยน Server เป็น QBCore Script เดิมอาจไม่สามารถทำงานได้โดยอัตโนมัติ
เช่นเดียวกับ QBCore → Qbox แม้ Qbox จะมี Compatibility สำหรับ QB ecosystem หลายส่วน แต่ก็ไม่ควรสรุปว่า Script ทุกตัวรองรับ 100%
ต้องตรวจ
Player Data
Jobs
Money
Callbacks
Exports
Events
Items
Database
เป็นราย Script
หาก Error เริ่มหลังเปลี่ยน Framework ให้ตรวจ Compatibility ก่อนแก้ Source Code
⑳ Error หลังเปลี่ยน Inventory
Inventory เชื่อมต่อกับ Script จำนวนมาก เช่น
Jobs
Shops
Crafting
Police
Garage
Housing
Evidence
Trunk
Stash
เมื่อเปลี่ยน Inventory อาจเกิด Error เพราะ
Export เดิมไม่มี
Item API เปลี่ยน
Metadata ต่างกัน
Stash API ต่างกัน
Config ยังเลือก Inventory เก่า
ดังนั้นหากหลาย Script Error หลังเปลี่ยน Inventory ให้แก้ Integration ตรงกลางก่อน ไม่ควรแก้ทุก Script แบบแยกส่วนทันที
㉑ Error หลังเปลี่ยน Target
หลักเดียวกันใช้กับ Target
สมมติ Script ตั้ง
Config.Target = 'ox_target'
แต่ Server เปลี่ยนไปใช้ Target ระบบอื่น
Interaction อาจไม่ขึ้น หรือ Client Error
ตรวจ
Config
Dependency
Export
Zone API
Entity Target
Framework Bridge
หาก Script รองรับหลาย Target ให้ใช้ Integration ที่ผู้พัฒนามีให้ก่อนแก้ Source เอง
㉒ Syntax Error คืออะไร
Syntax Error หมายถึง Code ไม่สามารถ Parse ได้ตามรูปแบบภาษาที่ถูกต้อง
ตัวอย่าง Lua ที่ผิด
if Config.Debug then
print('debug')
แต่ไม่มี
end
ก็จะเกิด Syntax Error
ข้อผิดพลาดที่พบบ่อย ได้แก่
ลืม
endลืม
)ลืม
}Quote ไม่ครบ
Comma ผิด
Copy Code มาไม่ครบ
แก้ Config ผิด Syntax
ถ้า Error เกิดหลังแก้ Config เมื่อไม่กี่นาทีก่อน ให้ย้อนตรวจจุดที่เพิ่งแก้เป็นอันดับแรก
㉓ Error unexpected symbol near คืออะไร
Lua อาจแสดง Error ประมาณ
unexpected symbol near ...
มักหมายถึง Parser พบตัวอักษรหรือโครงสร้างที่ไม่ควรอยู่ตรงนั้น
ตัวอย่างปัญหาอาจเกิดจาก
Config.Price = 500,
ในตำแหน่งที่ไม่ควรมี Comma
หรือ Quote ผิด
Config.Job = 'police"
รวมถึงการ Copy ข้อความจากเว็บไซต์แล้วมี Character แปลกติดมาด้วย
ให้ตรวจบริเวณบรรทัดที่ Error และบรรทัดก่อนหน้า เพราะ Syntax Error บางครั้งถูกตรวจพบช้ากว่าตำแหน่งที่พิมพ์ผิดจริงหนึ่งช่วง
㉔ Error attempt to compare number with nil
ตัวอย่าง
attempt to compare number with nil
เกิดเมื่อ Code พยายามเปรียบเทียบตัวเลขกับค่าที่ไม่มี
ตัวอย่าง
if money > Config.Price then
แต่ Config.Price เป็น nil
ต้องหาว่า
Config.Price ถูกกำหนดหรือไม่
Config ถูกโหลดหรือไม่
Variable ได้ข้อมูลหรือไม่
Database คืนค่าอะไร
Type ถูกต้องหรือไม่
อย่าแก้เพียงเปลี่ยน nil เป็น 0 โดยไม่รู้ความหมาย เพราะอาจทำให้ Logic ทางการเงินผิด
㉕ Error bad argument คืออะไร
Lua Function บางตัวต้องการข้อมูลชนิดหนึ่ง แต่ได้รับข้อมูลคนละแบบ
อาจพบข้อความคล้าย
bad argument
ตัวอย่างเชิงแนวคิด Function ต้องการ Number แต่ได้รับ String
someFunction('100')
แทน
someFunction(100)
ควรตรวจ Data Type เช่น
string
number
boolean
table
nil
โดยเฉพาะค่าที่มาจาก Config, JSON หรือ Database
㉖ Error stack traceback ต้องอ่านอย่างไร
หลัง Error หลักอาจมี Stack Trace แสดง Call Chain
แนวคิดประมาณ
Error
↓
Function A
↓
Function B
↓
Event C
อย่ากลัวข้อความยาว
ให้หาบรรทัดแรกที่ชี้ไปยัง Resource ของเรา เช่น
@my-script/server/main.lua:125
จากนั้นค่อยดู Call ก่อนหน้าและหลัง
Stack Trace มีประโยชน์ในการบอกว่า Error เกิดผ่าน Function หรือ Event ไหน
㉗ Script Error แต่ไม่มีเลขบรรทัดทำอย่างไร
บาง Error อาจไม่ชี้ Line ที่เข้าใจง่าย โดยเฉพาะ Error ที่เกิดจาก
Dependency
NUI
Database
Export
Resource Runtime
Compiled/Escrowed Script
ให้ใช้ข้อมูลที่มีแทน เช่น
ชื่อ Resource
ชื่อ Export
ชื่อ Event
ชื่อ Dependency
ข้อความ Error
เวลาที่ Error เกิด
จากนั้นลอง Reproduce ปัญหา
ตัวอย่าง
เข้า Garage
↓
กด E
↓
Error เกิดทันที
ก็ช่วยบอกได้ว่า Error น่าจะอยู่ใน Interaction Flow ของ Garage
㉘ Script แบบ Escrow Error แก้ได้ไหม
Script แบบ Asset Escrow อาจมี Source บางส่วนที่เจ้าของ Server แก้ไม่ได้
กรณี Error อยู่ในไฟล์ที่ Protected วิธีที่เหมาะสมคือ
ตรวจ Documentation
ตรวจ Config ที่แก้ได้
ตรวจ Dependency
ตรวจ Framework Version
ตรวจ Error เต็ม
ตรวจ Version ของ Script
ติดต่อ Developer พร้อมข้อมูล Error
ไม่ควรพยายามแก้ Protection หรือทำลายระบบ Escrow
สิ่งที่ช่วย Developer ได้มากคือส่ง Error เต็ม + Version + Framework + ขั้นตอนที่ทำให้ Error เกิด
㉙ FiveM Error เพราะ Resource Start ผิดลำดับ
ตัวอย่าง
ensure my-script
ensure ox_lib
แต่ my-script เรียก ox_lib ตั้งแต่ตอน Start
ก็อาจ Error
ควรจัดเป็น
ensure ox_lib
ensure my-script
หลักคือ
Resource ที่ถูกพึ่งพา
↓
Resource ที่เรียกใช้งานมัน
แต่ต้องดู Dependency จริง ไม่ใช่จัดตามชื่อหมวดอย่างเดียว
Server ขนาดใหญ่ควรมี Startup Order ที่ชัดเจน
㉚ FiveM Error เพราะ Resource ชื่อถูกเปลี่ยน
Script บางตัวอ้าง Resource Name แบบตรง ๆ
สมมติ Developer ออกแบบให้ชื่อ
my_inventory
แต่เรา Rename เป็น
best_inventory
Resource อื่นอาจยังเรียก
exports['my_inventory']
จึงเกิด Error
ดังนั้นก่อน Rename Resource ให้ตรวจ Documentation และ Search ชื่อ Resource ใน Script ที่เชื่อมต่อกันก่อน
การเปลี่ยนชื่อ Folder เพื่อให้ดูสวยอาจสร้างปัญหาโดยไม่จำเป็น
㉛ วิธีใช้ print ช่วยหา FiveM Error
สำหรับ Lua Script ที่แก้ Source ได้ สามารถใช้ print() ช่วยตรวจ Flow
ตัวอย่าง
print('Step 1 loaded')
หรือ
print(Config.Framework)
เพื่อดูว่าค่าเป็นอะไร
แต่ต้องระวังข้อมูลสำคัญ
ไม่ควร Print
Password
Token
Secret
Database Credential
Sensitive Player Data
บน Production Console
และหลัง Debug เสร็จควรลบ Debug Output ที่ไม่จำเป็นออก เพื่อไม่ให้ Console เต็ม
㉜ ใช้ Debug Mode ของ Script ก่อนแก้ Code
Script หลายตัวมี
Config.Debug = false
หาก Documentation รองรับ สามารถเปิดชั่วคราวเป็น
Config.Debug = true
แล้วทดสอบใหม่
Debug Mode อาจช่วยแสดง
Zone
Framework Detection
Callback
Event
Player Data
Interaction
ได้มากกว่า Console ปกติ
หลังแก้เสร็จควรคืนค่าตามคำแนะนำของ Developer
㉝ Script Error กับ Resmon สูงเหมือนกันไหม
ไม่เหมือนกัน
Script Error
หมายถึง Code หรือระบบบางส่วนเกิดข้อผิดพลาด
Resmon สูง
หมายถึง Resource ใช้เวลา CPU/ทรัพยากร Client สูงกว่าที่ควร
Script อาจ
ไม่มี Error แต่กิน CPU สูง
หรือ
มี Error แต่ CPU ไม่สูง
ได้ทั้งคู่
Cfx.re มี Resource Monitor และ Profiler สำหรับช่วยตรวจ Resource ที่ใช้เวลาประมวลผลสูง ดังนั้นอย่าสับสนระหว่าง Correctness Error กับ Performance Problem
㉞ Hitch Warning เกี่ยวกับ Script Error หรือไม่
Hitch Warning มักเกี่ยวข้องกับ Resource ที่ใช้เวลาประมวลผลนานจน Server Tick สะดุด
สาเหตุอาจมาจาก
Loop หนัก
SQL Query ช้า
Code Block ใช้เวลานาน
Resource ทำงานมากเกินไป
มันไม่ใช่ Error ชนิดเดียวกับ Lua Syntax Error
หาก Console มี Hitch Warning จำนวนมาก ควรใช้ Profiler ตรวจ Resource และ Thread ที่ใช้เวลาสูง
ไม่ควรแก้ด้วยการเพิ่ม RAM อย่างเดียวโดยไม่รู้ว่า Resource ไหนเป็นต้นเหตุ
㉟ อย่าล้าง Cache ทุกครั้งที่ Script Error
นี่เป็นวิธีที่ถูกแนะนำเกินความจำเป็นมากที่สุดวิธีหนึ่ง
หาก Console บอกว่า
No such export
การล้าง Cache ไม่ได้สร้าง Export ที่หายขึ้นมา
ถ้าบอก
Table doesn't exist
การล้าง Cache ก็ไม่ได้สร้าง Database Table
ถ้าบอก
Missing dependency
การล้าง Cacheก็ไม่ได้ติดตั้ง Dependency
จึงต้องแก้ตาม Error ที่เกิดจริง
Cache ควรเป็น Troubleshooting เฉพาะกรณีที่ปัญหาชี้ไปทาง Cache ไม่ใช่คำตอบแรกของ Script Error ทุกชนิด
㊱ Restart Resource ช่วยได้เมื่อไร
สามารถใช้
restart my-script
หรือ
ensure my-script
หลังแก้ Config หรือ Code แล้ว
แต่ Restart เป็นเพียงการโหลด Resource ใหม่
ถ้าต้นเหตุคือ
SQL ไม่มี
Dependency ไม่มี
Export ไม่มี
Framework ผิด
Syntax ผิด
Error จะกลับมาอีก
หลักที่ถูกต้องคือ
แก้ Root Cause
↓
Restart
↓
ตรวจ Error ใหม่
ไม่ใช่
Error
↓
Restart ซ้ำ
↓
หวังว่าจะหาย
㊲ วิธีแก้ Script Error หลังติดตั้ง Resource ใหม่
ถ้า Server ปกติก่อนติดตั้ง Resource ใหม่ ให้เริ่มจาก Resource ล่าสุด
ตัวอย่างเพิ่ม
new-phone
แล้ว Server เริ่ม Error
Comment ใน server.cfg
# ensure new-phone
Restart แล้วดูว่า Error หายหรือไม่
ถ้าหาย แสดงว่าปัญหาสัมพันธ์กับ Resource ใหม่หรือ Dependency ของมัน
จากนั้นตรวจ
Documentation
Dependency
Framework
Config
SQL
Console
วิธีนี้เร็วกว่าการแก้ Server ทั้งชุด
㊳ วิธีแก้เมื่อ Error หลาย Resource พร้อมกัน
หากวันหนึ่งขึ้น Error พร้อมกัน 20 Resource อย่ารีบสรุปว่า Script 20 ตัวเสียพร้อมกัน
หา Dependency ร่วมก่อน
เช่นทุก Resource ใช้
Framework
ox_lib
oxmysql
Inventory
Target
หาก Core Resource ตัวเดียว Start ไม่สำเร็จ Resource ลูกทั้งหมดอาจ Error ตาม
แนวคิดคือ
20 Errors
↓
หา Common Dependency
↓
เจอ Core Error 1 จุด
↓
แก้ Core
↓
Errors อื่นอาจหาย
นี่คือเหตุผลที่ควรอ่าน Error แรกเสมอ
㊴ วิธี Debug FiveM Script Error แบบเป็นระบบ
ใช้กระบวนการนี้ได้เกือบทุกกรณี
ขั้นที่ 1
Reproduce Error ให้ได้
ขั้นที่ 2
บันทึก Error เต็ม
ขั้นที่ 3
ดูว่าเป็น Client หรือ Server
ขั้นที่ 4
หา Resource
ขั้นที่ 5
หา File และ Line
ขั้นที่ 6
หา Error แรก
ขั้นที่ 7
ตรวจ Dependency
ขั้นที่ 8
ตรวจ Version
ขั้นที่ 9
ตรวจ Config
ขั้นที่ 10
ตรวจ Database
ขั้นที่ 11
แก้เพียงหนึ่งจุด
ขั้นที่ 12
Restart Resource
ขั้นที่ 13
Reproduce อีกครั้ง
ขั้นที่ 14
เปรียบเทียบ Error ก่อนและหลัง
แนวทางของ comsiam คืออย่าเปลี่ยนตัวแปรหลายอย่างพร้อมกัน เพราะแม้ Script จะกลับมาทำงาน คุณอาจไม่รู้ว่าจริง ๆ แล้วอะไรคือสาเหตุ
㊵ ข้อมูลอะไรควรเก็บก่อนขอความช่วยเหลือ
ถ้าต้องส่งปัญหาให้ Developer ควรเตรียมข้อมูลให้ครบ
ชื่อ Script
Script Version
Framework
Framework Version
Dependency
Error เต็ม
Resource ที่เกี่ยวข้อง
ขั้นตอนที่ทำให้ Error เกิด
การเปลี่ยนแปลงล่าสุด
ถ้า Error มี
File
Line Number
Stack Trace
ให้ส่งไปด้วย
ข้อมูลแบบนี้มีประโยชน์มากกว่าการบอกเพียง
Script ใช้ไม่ได้ครับ
เพราะ Developer สามารถจำกัดสาเหตุได้เร็วกว่า
Checklist แก้ FiveM Script Error
เมื่อเห็น Error
อ่าน Error เต็ม
หา Error แรก
ดู Resource
ดู File
ดู Line Number
แยก Client/Server
ถ่ายหรือ Copy Error เก็บไว้
ตรวจระบบ
Resource Start หรือไม่
fxmanifest.luaถูกหรือไม่Dependency ครบหรือไม่
Start Order ถูกหรือไม่
Framework ตรงหรือไม่
Config ถูกหรือไม่
Version Compatible หรือไม่
ตรวจข้อมูล
Database เชื่อมต่อได้
SQL Import แล้ว
Migration ครบ
Item มี
Job มี
Permission ถูก
หลังแก้
Restart Resource
ตรวจ Server Console
ตรวจ F8
Reproduce Error
ทดสอบ Feature จริง
Restart Server ทดสอบ
ตรวจ Resource ที่เชื่อมต่อกัน
สรุป FiveM Script Error แก้อย่างไร
การแก้ FiveM Script Error ที่มีประสิทธิภาพที่สุดคือ อ่านข้อความ Error ก่อน แล้วหาต้นเหตุแทนการเดา
ถ้าเจอข้อความลักษณะ
SCRIPT ERROR: @resource/file.lua:line
ให้แยกข้อมูลเป็น
Resource
File
Line
Error Type
แล้วตรวจ Code และระบบที่เกี่ยวข้อง
Error ที่พบบ่อยสามารถแบ่งเป็นกลุ่มใหญ่ได้ดังนี้
Lua / Syntax Error
Dependency Error
Export Error
Framework Error
Database Error
Config Error
Client Error
Resource/Manifest Error
Compatibility Error
Performance Problem
สำหรับ Client Error ให้ตรวจ F8 ส่วน Server Error ให้ดู Server Console หรือ txAdmin Console
อย่าใช้วิธี Restart, Reinstall หรือล้าง Cache เป็นคำตอบเดียวสำหรับทุก Error เพราะ Error อย่าง No such export, Missing dependency, Table doesn't exist หรือ nil value มีต้นเหตุที่ต้องแก้ตรงจุด
สิ่งที่ comsiam แนะนำคือหา Error แรก ให้เจอก่อน โดยเฉพาะเมื่อ Console มี Error จำนวนมาก เพราะ Error หลายรายการอาจเกิดจาก Core Dependency ตัวเดียวที่ล้มเหลว
เมื่อแก้ทีละจุด ตรวจผลทุกครั้ง และเก็บ Backup ก่อนเปลี่ยนแปลงสำคัญ การแก้ FiveM Script Error จะเป็นกระบวนการที่คาดเดาได้มากขึ้น และไม่จำเป็นต้องรื้อ Server ใหม่ทุกครั้งที่มีข้อความสีแดงใน Console
Comments
Post a Comment