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.lua

  • Tutorial มีอายุหลายปี

  • 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

Popular posts from this blog

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

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

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