FiveM Lua 5.4 คืออะไร มีอะไรเปลี่ยนไป? Resource เก่าต้องแก้หรือไม่
FiveM Lua 5.4 คือ Lua Runtime รุ่นปัจจุบันที่ FiveM ใช้สำหรับรัน Resource ที่เขียนด้วยภาษา Lua โดย FiveM ใช้ Runtime ที่เรียกว่า CfxLua ซึ่งพัฒนาต่อยอดจาก Lua 5.4 และเพิ่มความสามารถที่เหมาะกับ FiveM เช่น Vector และ Quaternion
การเปลี่ยนแปลงที่ FiveM Developer ควรรู้มากที่สุดคือ ตั้งแต่เดือนมิถุนายน 2025 Lua 5.3 ถูกเลิกใช้ และ Lua Script บน FiveM ทั้งหมดใช้ Lua 5.4 แล้ว
นั่นหมายความว่า Resource ใหม่ไม่จำเป็นต้องใส่
lua54 'yes'
ใน fxmanifest.lua อีกต่อไป
บทความนี้จะอธิบายว่า Lua 5.4 บน FiveM คืออะไร ต่างจากระบบเก่าอย่างไร Resource เก่าต้องแก้หรือไม่ และ Developer ควรตรวจอะไรบ้างเมื่อนำ Script เก่ามาใช้กับ FiveM ปัจจุบัน
① FiveM Lua 5.4 คืออะไร
FiveM รองรับ Lua เป็นหนึ่งในภาษาหลักสำหรับเขียน Script
ไฟล์ทั่วไป เช่น
client.lua
server.lua
config.lua
shared.lua
ไม่ได้ถูกรันด้วย Lua Interpreter ทั่วไปโดยตรง แต่ผ่าน Runtime ของ FiveM ที่เรียกว่า
CfxLua
CfxLua ปัจจุบันพัฒนาจาก
Lua 5.4
และเพิ่มความสามารถที่เกี่ยวข้องกับ FiveM เข้าไป
ดังนั้นเมื่อเราเขียน
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
เรากำลังใช้
Lua 5.4 Syntax
+
CfxLua Runtime
+
FiveM API
+
GTA V Natives
ร่วมกัน
② ก่อนหน้านี้ FiveM ใช้ Lua อะไร
ในอดีต FiveM รองรับ Lua Runtime รุ่นเก่ากว่า และช่วงหนึ่ง Resource สามารถเลือกใช้ Lua 5.4 ด้วยการกำหนดใน fxmanifest.lua
ตัวอย่างที่พบใน Script เก่าคือ
lua54 'yes'
Manifest อาจมีลักษณะนี้
fx_version 'cerulean'
game 'gta5'
lua54 'yes'
client_script 'client.lua'
server_script 'server.lua'
บรรทัดนี้เคยมีหน้าที่บอก Runtime ว่า Resource ต้องการ Lua 5.4
แต่สถานการณ์ปัจจุบันเปลี่ยนไปแล้ว
③ ตอนนี้ต้องใส่ lua54 'yes' หรือไม่
ไม่ต้อง
ปัจจุบัน lua54 ใน Resource Manifest ถูกระบุว่า Deprecated แล้ว
เนื่องจาก FiveM ยกเลิก Lua 5.3 ตั้งแต่เดือนมิถุนายน 2025 และ Lua Script ทั้งหมดใช้ Lua 5.4 อยู่แล้ว
ดังนั้น Resource ใหม่สามารถเขียน Manifest แบบนี้ได้เลย
fx_version 'cerulean'
game 'gta5'
client_script 'client.lua'
server_script 'server.lua'
ไม่จำเป็นต้องมี
lua54 'yes'
อีกต่อไป
④ ถ้า Resource เก่ายังมี lua54 'yes' ต้องลบไหม
ถ้าพบ Resource เก่าที่มี
lua54 'yes'
ไม่ต้องตกใจ
บรรทัดดังกล่าวมาจากช่วงที่ Lua 5.4 ยังเป็น Option ที่ต้องเปิดใช้งาน
สำหรับ Resource ปัจจุบันสามารถปรับ Manifest และนำบรรทัดนี้ออกได้ เพราะไม่ได้ใช้เพื่อเลือก Runtime อีกแล้ว
ตัวอย่าง
แบบเก่า
fx_version 'cerulean'
game 'gta5'
lua54 'yes'
client_script 'client.lua'
server_script 'server.lua'
แบบปัจจุบัน
fx_version 'cerulean'
game 'gta5'
client_script 'client.lua'
server_script 'server.lua'
Functionality ของ Resource ไม่ควรพึ่งพา lua54 'yes' เพื่อเปิด Lua 5.4 อีกต่อไป เพราะ Runtime เป็น Lua 5.4 อยู่แล้ว
⑤ lua54 'yes' กับ fx_version คนละอย่างกัน
มือใหม่บางคนอาจคิดว่าเมื่อไม่ต้องใช้
lua54 'yes'
แล้วก็ไม่ต้องใช้
fx_version
ด้วย
ไม่ถูกต้อง
สองอย่างนี้คนละหน้าที่กัน
lua54 'yes'
เคยใช้เลือก Lua 5.4 และปัจจุบัน Deprecated
แต่
fx_version 'cerulean'
ยังเป็นส่วนสำคัญของ Resource Manifest
ตัวอย่าง Resource ปัจจุบัน
fx_version 'cerulean'
game 'gta5'
author 'Your Name'
description 'Example FiveM Resource'
version '1.0.0'
client_script 'client.lua'
server_script 'server.lua'
ดังนั้นอย่าลบบรรทัด fx_version เพียงเพราะเห็นว่า lua54 ไม่จำเป็นแล้ว
⑥ CfxLua คืออะไร
CfxLua คือ Lua Runtime ที่ FiveM ปรับแต่งสำหรับการทำงานใน CitizenFX
พื้นฐานมาจาก Lua 5.4 แต่มี Extension เพิ่มเติมที่ช่วยในการเขียน FiveM Script
ตัวอย่างที่เห็นชัดมากคือ Vector
local coords = vector3(
215.0,
-810.0,
30.0
)
Lua มาตรฐานไม่ได้มี vector3 ในรูปแบบเดียวกับ CfxLua สำหรับ FiveM
แต่ CfxLua รองรับ Vector เป็นส่วนหนึ่งของ Runtime
สิ่งนี้มีประโยชน์มากเพราะ GTA V ใช้ Coordinates ตลอดเวลา
⑦ Vector ใน CfxLua
FiveM Developer จะพบ Vector บ่อยมาก
เช่น
local shop = vector3(
25.7,
-1345.2,
29.5
)
สามารถอ่านค่าได้
print(shop.x)
print(shop.y)
print(shop.z)
และสามารถคำนวณระยะทางได้อย่างสะดวก
local playerCoords = GetEntityCoords(PlayerPedId())
local shopCoords = vector3(25.7, -1345.2, 29.5)
local distance = #(playerCoords - shopCoords)
จากนั้นตรวจ
if distance < 3.0 then
print('Player is near the shop')
end
นี่เป็นตัวอย่างว่าทำไม CfxLua จึงเหมาะกับ FiveM Development มากกว่า Lua Interpreter ทั่วไป
⑧ FiveM รองรับ Vector อะไรบ้าง
ใน CfxLua จะพบรูปแบบ เช่น
vector2()
vector3()
vector4()
ตัวอย่าง vector2
local point = vector2(100.0, 200.0)
vector3
local coords = vector3(
100.0,
200.0,
30.0
)
และ vector4
local spawn = vector4(
100.0,
200.0,
30.0,
90.0
)
vector4 มักสะดวกสำหรับเก็บ
X
Y
Z
Heading
ในข้อมูล Spawn ต่าง ๆ
⑨ Lua 5.4 เปลี่ยนอะไรจาก Lua รุ่นเก่า
Lua 5.4 มีการเปลี่ยนแปลงหลายด้านในตัวภาษา เช่น
Garbage Collection
Coroutine
Variable Attributes
การจัดการ Resource ของภาษา
Library และ API บางส่วน
Behavior บางอย่างที่แตกต่างจากรุ่นก่อน
แต่สำหรับ FiveM Developer ทั่วไป สิ่งสำคัญที่สุดไม่ใช่การจำรายการ Change ของ Lua ทั้งหมด
ควรรู้ว่า
FiveM Lua Script ปัจจุบันทำงานบน Lua 5.4 และ Script เก่าควรถูกทดสอบกับ Runtime ปัจจุบัน
โดยเฉพาะ Resource ที่เก่ามากหรือใช้ Library ภายนอกที่พึ่งพา Behavior ของ Lua รุ่นเก่า
⑩ Variable Attributes ของ Lua 5.4
Lua 5.4 มี Variable Attribute เช่น <const>
ตัวอย่าง
local MAX_PLAYERS <const> = 48
หมายความว่า Variable ถูกกำหนดให้เป็นค่าคงที่ใน Scope นั้น
หากพยายามเปลี่ยนค่าอีก
MAX_PLAYERS = 64
จะเกิดปัญหา เพราะ Variable ถูกประกาศเป็น Constant
อย่างไรก็ตาม FiveM Script ทั่วไปไม่จำเป็นต้องเปลี่ยน Variable ทุกตัวมาใช้ <const>
ใช้เมื่อช่วยให้ Code มีความหมายและลดความผิดพลาดได้จริง
⑪ Lua 5.4 มี To-be-closed Variables
Lua 5.4 เพิ่มแนวคิด Variable Attribute
<close>
สำหรับ Resource Management บางรูปแบบในภาษา
Developer FiveM ทั่วไปอาจแทบไม่ต้องใช้ Feature นี้ใน Resource ทั่วไป
จึงไม่ควรกังวลว่าการย้ายมา Lua 5.4 หมายความว่าจะต้อง Rewrite Script เพื่อใช้ Syntax ใหม่ทั้งหมด
Feature ใหม่เป็นสิ่งที่สามารถเลือกใช้ตามความเหมาะสม
⑫ Garbage Collection ของ Lua 5.4
Lua 5.4 มีการปรับปรุงระบบ Garbage Collection และรองรับรูปแบบการทำงานที่พัฒนาขึ้นจาก Lua รุ่นก่อน
Garbage Collector มีหน้าที่จัดการ Memory ของ Object ที่ไม่ถูกใช้งานแล้ว
แต่สิ่งนี้ไม่ได้หมายความว่า Developer สามารถเขียน Script แบบใช้ Memory ไม่จำกัดได้
ยังควรระวังเรื่อง
Table ขนาดใหญ่
Cache ที่ไม่เคยลบ
Entity Reference
Event Handler
Data ที่สะสมเรื่อย ๆ
Loop ที่สร้าง Object จำนวนมาก
Runtime ที่ดีไม่สามารถแก้ Architecture ที่ใช้ Memory ไม่เหมาะสมได้ทั้งหมด
⑬ Lua 5.4 ไม่ได้ทำให้ Script เร็วขึ้นทุกตัวอัตโนมัติ
การเปลี่ยน Runtime ไม่ได้หมายความว่า
Lua 5.4 = Script ทุกตัวเร็วขึ้นทันที
Performance ของ FiveM Resource ยังขึ้นอยู่กับ Code เป็นหลัก
เช่น
CreateThread(function()
while true do
Wait(0)
-- ทำงานหนักทุก Frame
end
end)
ถึงจะใช้ Lua 5.4 ก็ยังสามารถทำให้ Resource ใช้ CPU สูงได้
ควร Optimize ตาม Logic จริงของ Script
⑭ Wait(0) ยังต้องระวังเหมือนเดิม
ตัวอย่าง
CreateThread(function()
while true do
Wait(0)
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
-- Logic
end
end)
Loop นี้ทำงานถี่มาก
ถ้าระบบไม่จำเป็นต้องตรวจทุก Frame สามารถเพิ่ม Interval ได้
เช่น
CreateThread(function()
while true do
Wait(1000)
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
-- Logic
end
end)
แต่ไม่ควรเปลี่ยนทุก Loop เป็น 1000 แบบสุ่มเช่นกัน
ต้องพิจารณาความต้องการของ Gameplay
⑮ Resource เก่าจะใช้ Lua 5.4 ได้เลยหรือไม่
Resource Lua จำนวนมากสามารถทำงานต่อได้โดยไม่ต้อง Rewrite ทั้งหมด
โดยเฉพาะ Script ที่เขียนด้วย Syntax ทั่วไป เช่น
local money = 1000
if money >= 500 then
print('Enough')
end
หรือ
RegisterCommand('hello', function()
print('Hello')
end, false)
แต่ Resource เก่ามากควรทดสอบก่อนใช้บน Production Server
เพราะปัญหาอาจเกิดจาก
Lua Version
FiveM API ที่เปลี่ยนไป
Framework API
Database Library
Dependency
Deprecated Function
Resource Manifest
Server Artifact
ไม่ควรสรุปทันทีว่า Error ทุกอย่างเกิดจาก Lua 5.4
⑯ วิธีตรวจว่า Script เก่ามีปัญหากับ Lua 5.4 หรือไม่
เริ่มจาก Server Console และ Client Console
มองหา Error เช่น
SCRIPT ERROR
จากนั้นตรวจตามลำดับ
Resource
↓
File
↓
Line
↓
Error
ตัวอย่าง
attempt to index a nil value
หรือ
attempt to call a nil value
อย่าเห็นว่า Resource เก่าแล้วใส่
lua54 'yes'
เพื่อหวังแก้ปัญหา
เพราะ Lua 5.4 เป็น Runtime ปัจจุบันอยู่แล้ว
ต้องหาสาเหตุจริงจาก Error
⑰ Script เก่าใช้ lua54 'yes' แล้ว Error ต้องทำอย่างไร
การมี
lua54 'yes'
ไม่ใช่สิ่งที่ทำให้ Resource “รองรับ Lua 5.4 เพิ่มขึ้น” ใน FiveM ปัจจุบัน
ถ้า Resource Error ให้ตรวจอย่างอื่นด้วย เช่น
fxmanifest.lua
ถูกต้องหรือไม่
Dependency
Resource ที่ต้องใช้ Start แล้วหรือไม่
Framework
Version ตรงกันหรือไม่
Database
ใช้ Library ที่ Script รองรับหรือไม่
Export
ชื่อ Resource หรือ Export เปลี่ยนหรือไม่
Event
ชื่อ Event ยังตรงกันหรือไม่
Native
Native ถูกเรียกใน Client/Server Context ถูกต้องหรือไม่
อย่าแก้ Error ด้วยการเพิ่มและลบ lua54 ไปมาโดยไม่มีเหตุผล
⑱ fxmanifest.lua ที่แนะนำสำหรับ Resource Lua ใหม่
Resource พื้นฐานสามารถเริ่มแบบนี้
fx_version 'cerulean'
game 'gta5'
author 'Your Name'
description 'My FiveM Lua Resource'
version '1.0.0'
client_scripts {
'client/*.lua'
}
server_scripts {
'server/*.lua'
}
ถ้ามี Shared Script
shared_scripts {
'config.lua',
'shared/*.lua'
}
ตัวอย่างเต็ม
fx_version 'cerulean'
game 'gta5'
author 'Your Name'
description 'My FiveM Lua Resource'
version '1.0.0'
shared_scripts {
'config.lua'
}
client_scripts {
'client/*.lua'
}
server_scripts {
'server/*.lua'
}
ไม่ต้องใส่
lua54 'yes'
แล้ว
⑲ __resource.lua เกี่ยวกับ Lua 5.4 หรือไม่
อีกเรื่องที่มักสับสนคือ
__resource.lua
กับ
lua54 'yes'
เป็นคนละประเด็น
__resource.lua คือ Resource Manifest รูปแบบเก่า
ส่วน Manifest ปัจจุบันใช้
fxmanifest.lua
ดังนั้นถ้าเจอ Resource เก่าที่มีทั้ง
__resource.lua
และ Code เก่าอื่น ๆ ควรพิจารณา Migration ให้ทันสมัย
Resource ใหม่ควรสร้างด้วย fxmanifest.lua
⑳ Lua 5.4 ใช้กับ Client Script ได้ไหม
ได้
ตัวอย่าง
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
print(coords)
คือ Client Lua Script
และใช้ CfxLua Runtime
ตัวอย่าง fxmanifest.lua
fx_version 'cerulean'
game 'gta5'
client_script 'client.lua'
ไม่ต้องเปิด Lua 5.4 เพิ่ม
㉑ Lua 5.4 ใช้กับ Server Script ได้ไหม
ได้เช่นกัน
ตัวอย่าง
RegisterNetEvent('example:hello', function()
local playerId = source
print('Player:', playerId)
end)
กำหนดใน Manifest
server_script 'server.lua'
Lua สามารถใช้ทั้ง Client และ Server Context ของ FiveM
แต่ API ที่ใช้ได้ในแต่ละ Context อาจไม่เหมือนกัน
㉒ Lua 5.4 ใช้กับ ESX ได้ไหม
ได้
ESX Resource ที่ได้รับการดูแลให้รองรับ FiveM ปัจจุบันสามารถทำงานบน Lua Runtime ปัจจุบันได้
แต่หากเป็น ESX Script เก่าหลายปี ควรตรวจทั้ง
ESX Version
Export
Callback
Event
Database Connector
Manifest
Deprecated API
อย่าเหมารวมว่าปัญหา Compatibility ทั้งหมดมาจาก Lua 5.4
㉓ Lua 5.4 ใช้กับ QBCore ได้ไหม
ได้
แนวคิดเดียวกันคือควรใช้ Resource และ Dependency รุ่นที่เข้ากันกับ Server ปัจจุบัน
ถ้า Resource เก่ามี Error ควรตรวจ Framework API ก่อน
ตัวอย่าง Script อาจเรียก
QBCore.Functions.GetPlayer(...)
ปัญหาที่เกิดอาจมาจาก QBCore Version ไม่ตรงกับ Script มากกว่า Lua Runtime
㉔ Lua 5.4 ใช้กับ Qbox ได้ไหม
ได้
Qbox Resource ที่ใช้ Lua ก็ทำงานบน FiveM Lua Runtime ปัจจุบันเช่นกัน
ไม่ว่าคุณจะใช้
ESX
QBCore
Qbox
Standalone
Lua Script ที่ FiveM รันจะอยู่บน CfxLua Runtime ปัจจุบัน
Framework เป็นอีก Layer หนึ่งเหนือ FiveM Runtime
㉕ Lua 5.4 ใช้กับ ox_lib ได้ไหม
ได้ หาก Resource และ Version ของ Library เข้ากัน
Architecture โดยทั่วไปคือ
FiveM
↓
CfxLua / Lua 5.4
↓
Resource
↓
ox_lib
↓
Script Logic
หากเกิด Error ใน Library ควรตรวจ Version และ Dependency ของ Resource ด้วย
㉖ Lua 5.4 ใช้กับ oxmysql ได้ไหม
ได้
Server Lua สามารถใช้ Database Library เช่น oxmysql เพื่อเชื่อมต่อ MySQL/MariaDB
แนวคิดคือ
Lua 5.4 Resource
↓
oxmysql
↓
MySQL / MariaDB
↓
Database
Lua Runtime และ Database Connector เป็นคนละ Layer
ดังนั้น SQL Error ไม่ได้หมายความว่า Lua 5.4 มีปัญหา
ควรอ่าน Error จาก Database และ Query โดยตรง
㉗ Lua 5.4 มีผลกับ NUI หรือไม่
NUI เป็นอีก Environment หนึ่ง
โดยทั่วไป Front-end ใช้
HTML
CSS
JavaScript
ส่วน Lua ทำหน้าที่ติดต่อ NUI เช่น
SendNUIMessage({
action = 'open'
})
ดังนั้น Flow อาจเป็น
CfxLua
↓
SendNUIMessage
↓
NUI JavaScript
↓
HTML/CSS
Lua 5.4 ไม่ได้เปลี่ยน JavaScript ของ NUI ให้กลายเป็น Lua
ต้องแยก Runtime แต่ละส่วนออกจากกัน
㉘ Lua 5.4 ช่วยเรื่อง Code Quality อย่างไร
Lua 5.4 มี Feature ใหม่ ๆ ที่ Developer สามารถนำมาใช้ได้ แต่ Code Quality ยังขึ้นอยู่กับ Architecture
สิ่งที่สำคัญกว่าคือ
ใช้
localให้เหมาะสมแยก Function ให้ชัด
ไม่สร้าง Global Variable โดยไม่จำเป็น
Validate Client Data
ลด Loop ที่ไม่จำเป็น
ไม่ Query Database ถี่เกินไป
แยก Config
แยก Client/Server Logic
ตั้งชื่อ Event ให้ชัดเจน
การ Upgrade Runtime ไม่สามารถทดแทนหลัก Programming ที่ดีได้
㉙ ตัวอย่าง Resource Lua 5.4 สำหรับ FiveM
โครงสร้าง
lua54_example/
├── fxmanifest.lua
├── client.lua
└── server.lua
fxmanifest.lua
fx_version 'cerulean'
game 'gta5'
author 'Your Name'
description 'FiveM Lua Example'
version '1.0.0'
client_script 'client.lua'
server_script 'server.lua'
client.lua
RegisterCommand('mycoords', function()
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
print(('X: %.2f Y: %.2f Z: %.2f'):format(
coords.x,
coords.y,
coords.z
))
end, false)
server.lua
RegisterNetEvent('example:hello', function()
local playerId = source
print('Hello from player:', playerId)
end)
สังเกตว่าไม่มี
lua54 'yes'
แต่ Script ก็ใช้ Lua Runtime ปัจจุบันของ FiveM อยู่แล้ว
㉚ วิธีอัปเดต Resource เก่าให้เหมาะกับ FiveM ปัจจุบัน
หากมี Script เก่ามาก แนะนำตรวจตามลำดับนี้
ขั้นที่ 1 — Backup
สำรอง Resource ก่อนแก้ไข
ขั้นที่ 2 — ตรวจ Manifest
ถ้ายังใช้
__resource.lua
ควรพิจารณาย้ายมา fxmanifest.lua
ขั้นที่ 3 — ตรวจ lua54
ถ้ามี
lua54 'yes'
ควรทราบว่า Option นี้ Deprecated และไม่จำเป็นแล้ว
ขั้นที่ 4 — ตรวจ Dependency
ดูว่า Resource ต้องใช้ Framework หรือ Library ใด
ขั้นที่ 5 — Start Resource ใน Development Server
อย่าทดสอบครั้งแรกบน Production
ขั้นที่ 6 — อ่าน Console
แก้ Error ทีละจุด
ขั้นที่ 7 — ทดสอบ Client และ Server
ตรวจทั้ง F8 Console และ Server Console
ขั้นที่ 8 — ตรวจ Performance
ดู Resmon และ Profiler หาก Resource ทำงานหนักผิดปกติ
㉛ อย่าอัปเดต Script โดยการลบ Code แบบสุ่ม
หาก Resource เก่า Error หลังนำมาใช้กับ Server ใหม่ อย่าเริ่มจากการลบ
Event
Export
Callback
Thread
โดยไม่รู้หน้าที่
ควรทำ
อ่าน Error
↓
หา File
↓
หาบรรทัด
↓
ตรวจ Function
↓
ตรวจ Dependency
↓
แก้ต้นเหตุ
เพราะ Resource หนึ่งอาจมี Script หลายตัวพึ่งพากันอยู่
การแก้สุ่มสามารถสร้าง Error ใหม่ตามมาอีกหลายจุด
㉜ จำเป็นต้องเรียน Lua 5.3 ก่อน Lua 5.4 หรือไม่
ไม่จำเป็น
สำหรับคนเริ่ม FiveM ในปัจจุบัน ควรเรียน Lua 5.4 โดยตรง
ไม่จำเป็นต้องเรียน
Lua 5.3
↓
แล้วค่อย Lua 5.4
ให้เรียน
Lua 5.4
+
CfxLua
+
FiveM API
ได้เลย
นี่จะลดความสับสนจาก Tutorial เก่า
㉝ Tutorial FiveM เก่ายังใช้ได้ไหม
ใช้เป็นแนวคิดได้หลายส่วน แต่ต้องตรวจวันที่และ API
Tutorial เก่าอาจยังสอนสิ่งที่ถูกต้อง เช่น
RegisterCommand()
หรือ
PlayerPedId()
แต่บางส่วนอาจมีรูปแบบเก่า เช่น
__resource.lua
หรือ
lua54 'yes'
รวมถึง API ของ Framework ที่เปลี่ยนไปแล้ว
ดังนั้นอย่าดูเพียงว่า Code “เหมือน FiveM”
ควรตรวจ Documentation ปัจจุบันด้วย
㉞ จะรู้ได้อย่างไรว่า Resource เก่าเกินไป
สัญญาณที่ควรตรวจเพิ่มเติม ได้แก่
ใช้
__resource.luaTutorial มีอายุหลายปี
Dependency ไม่มีการพัฒนาแล้ว
Framework Version เก่ามาก
มี Deprecated Warning
Server Console มี Warning จำนวนมาก
ใช้ Database Connector รุ่นเก่า
Code อ้าง API ที่หาไม่พบแล้ว
ไม่ได้หมายความว่า Resource นั้นใช้ไม่ได้ทันที
แต่ควรทดสอบและตรวจ Compatibility ก่อนนำขึ้น Production
㉟ FiveM Lua 5.4 กับ Performance
การเขียน Lua FiveM ที่มี Performance ดีควรเริ่มจาก Architecture
ตัวอย่างสิ่งที่ควรตรวจ
Loop
ทำงานถี่เกินไปหรือไม่
Native
เรียกทุก Frame โดยจำเป็นหรือไม่
Event
Trigger บ่อยเกินไปหรือไม่
SQL
Query ซ้ำโดยไม่จำเป็นหรือไม่
Cache
มีข้อมูลสะสมไม่ถูกลบหรือไม่
Entity
สร้างแล้ว Cleanup หรือไม่
NUI
ส่ง Message ถี่เกินไปหรือไม่
เครื่องมืออย่าง Resource Monitor และ Profiler จะช่วยหา Resource ที่ใช้ทรัพยากรสูงได้ดีกว่าการเดาว่า Lua Version เป็นสาเหตุ
㊱ สิ่งที่ FiveM Developer ควรทำหลัง Lua 5.4 เป็นมาตรฐาน
สำหรับ Resource ใหม่
ใช้
fxmanifest.lua
และไม่ต้องเปิด
lua54 'yes'
สำหรับ Resource เก่า
ควร
Backup
↓
ตรวจ Manifest
↓
ตรวจ Dependency
↓
ทดสอบกับ Artifact ปัจจุบัน
↓
อ่าน Error
↓
แก้ Compatibility
↓
ทดสอบ Performance
นี่เป็นแนวทางที่ปลอดภัยกว่าการแก้ Code ทั้ง Project ในครั้งเดียว
คำถามที่พบบ่อยเกี่ยวกับ FiveM Lua 5.4
FiveM ใช้ Lua เวอร์ชันอะไร
ปัจจุบัน FiveM ใช้ CfxLua ซึ่งพัฒนาจาก Lua 5.4
ต้องใส่ lua54 'yes' ไหม
ไม่ต้องแล้ว lua54 ถูก Deprecated เพราะ Lua Script ของ FiveM ใช้ Lua 5.4 อยู่แล้ว
Lua 5.3 ยังใช้กับ FiveM ได้ไหม
FiveM เลิกใช้ Lua 5.3 แล้วตั้งแต่เดือนมิถุนายน 2025 และ Lua Script ปัจจุบันใช้ Lua 5.4
Resource เก่าที่มี lua54 'yes' ใช้ได้ไหม
บรรทัดดังกล่าวไม่จำเป็นแล้ว ควรทดสอบ Resource ทั้งระบบและตรวจ Compatibility ของ Dependency มากกว่าจะอาศัย Option นี้
ต้องเขียน Script ใหม่ทั้งหมดหลังเปลี่ยน Lua 5.4 ไหม
โดยทั่วไปไม่จำเป็น Resource จำนวนมากที่ใช้ Syntax ปกติสามารถทำงานต่อได้ แต่ Script เก่าควรทดสอบเพราะอาจพึ่งพา Runtime, Framework หรือ Library รุ่นเก่า
FiveM Lua 5.4 กับ CfxLua เหมือนกันไหม
FiveM ใช้ CfxLua ซึ่งเป็น Lua 5.4 ที่มีการปรับแต่งและเพิ่มความสามารถสำหรับ FiveM
fxmanifest.lua ยังต้องใช้ไหม
ต้องใช้สำหรับ Resource ปัจจุบัน โดย fxmanifest.lua เป็น Resource Manifest มาตรฐาน ขณะที่ __resource.lua เป็นรูปแบบเก่า
Lua 5.4 ทำให้ Resmon ลดลงไหม
ไม่โดยอัตโนมัติ Resmon ขึ้นกับ Code, Loop, Native, Event และ Architecture ของ Resource เป็นหลัก
สรุป FiveM Lua 5.4 คืออะไร
FiveM Lua 5.4 คือพื้นฐานของ CfxLua Runtime ที่ FiveM ใช้สำหรับรัน Lua Script ในปัจจุบัน
การเปลี่ยนแปลงที่ FiveM Developer ควรรู้มากที่สุดคือ
Lua 5.3
→ Deprecated
Lua 5.4
→ Runtime ปัจจุบัน
lua54 'yes'
→ Deprecated / ไม่ต้องใช้
fxmanifest.lua
→ ยังเป็น Resource Manifest ปัจจุบัน
ถ้ากำลังสร้าง Resource ใหม่ ให้เขียนสำหรับ Lua Runtime ปัจจุบันได้เลยโดยไม่ต้องเพิ่ม lua54 'yes'
ส่วน Resource เก่าควรทดสอบบน Development Server ตรวจ fxmanifest.lua, Dependency, Framework, Database Library และอ่าน Error จาก Console ก่อนแก้ไข
สำหรับคนที่กำลังเรียน FiveM Developer บน comsiam สิ่งสำคัญคือไม่ควรยึด Tutorial เก่าโดยไม่ตรวจ Version เพราะ FiveM, Framework และ Runtime มีการเปลี่ยนแปลงตามเวลา
เมื่อเข้าใจว่า CfxLua ปัจจุบันอยู่บน Lua 5.4 และรู้ว่าส่วนไหนเป็น Lua, FiveM API, Framework หรือ Library การแก้ Script เก่าและสร้าง Resource ใหม่จะง่ายขึ้นมาก และในบทความต่อ ๆ ไปของ comsiam เราจะค่อย ๆ เจาะ JavaScript, TypeScript, C#, Client/Server และระบบ FiveM Developer ขั้นสูงต่อไป
Comments
Post a Comment