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 คืนค่า nil

  • Resource 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

สิ่งที่ควรตรวจคือ

  1. Resource เป้าหมาย Start หรือยัง

  2. ชื่อ Resource ถูกหรือไม่

  3. Export ชื่อถูกหรือไม่

  4. Script Version ตรงกันหรือไม่

  5. Dependency ถูก Update หรือไม่

  6. API ถูกเปลี่ยนหรือยกเลิกหรือไม่

  7. 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 วิธีที่เหมาะสมคือ

  1. ตรวจ Documentation

  2. ตรวจ Config ที่แก้ได้

  3. ตรวจ Dependency

  4. ตรวจ Framework Version

  5. ตรวจ Error เต็ม

  6. ตรวจ Version ของ Script

  7. ติดต่อ 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

Popular posts from this blog

FiveM ยังน่าเล่นไหม? Enhanced เปลี่ยน FiveM แค่ไหน

FiveM คืออะไร เล่นอย่างไร สำหรับมือใหม่ เริ่มต้นตั้งแต่ศูนย์

วิธีตั้ง Admin Permission ด้วย add_ace และ add_principal FiveM แบบละเอียด