fxmanifest.lua FiveM คืออะไร ตั้งค่าอย่างไร
fxmanifest.lua คือ Resource Manifest ของ FiveM ทำหน้าที่บอก FXServer ว่า Resource นี้คืออะไร รองรับเกมอะไร ต้องโหลด Client Script, Server Script หรือ Shared Script ไฟล์ใด มี UI, Asset, Data File หรือ Dependency อะไรบ้าง
พูดง่าย ๆ คือ ถ้าโฟลเดอร์หนึ่งเป็น Script FiveM ไฟล์ fxmanifest.lua เปรียบเสมือน “สารบัญและคำสั่งเริ่มต้น” ที่บอก FiveM ว่าจะจัดการ Resource นั้นอย่างไร
ตัวอย่างพื้นฐานที่สุด
fx_version 'cerulean'
game 'gta5'
client_script 'client.lua'
server_script 'server.lua'
Resource อาจมีโครงสร้าง
my-script/
├── fxmanifest.lua
├── client.lua
└── server.lua
หาก fxmanifest.lua หาย อยู่ผิดตำแหน่ง หรือเขียนผิด FiveM อาจไม่มองโฟลเดอร์นั้นเป็น Resource ที่ถูกต้อง หรือ Resource อาจ Start แล้วโหลดไฟล์ไม่ครบ
① fxmanifest.lua คืออะไร
fxmanifest.lua เป็นไฟล์ Manifest ที่ต้องอยู่ในโฟลเดอร์หลักของ Resource
ตัวอย่าง
resources/
└── my-script/
├── fxmanifest.lua
├── client/
├── server/
└── config.lua
FiveM จะอ่านไฟล์นี้เพื่อดู Metadata และ Directive ต่าง ๆ เช่น
fx_version
game
author
description
version
client_script
server_script
shared_script
files
ui_page
dependency
data_file
แม้ Script ภายใน Resource จะเขียนด้วย JavaScript หรือ C# ตัว fxmanifest.lua เองก็ยังเป็นไฟล์ Lua Manifest
② fxmanifest.lua ต้องอยู่ตรงไหน
ตำแหน่งที่ถูกต้องโดยทั่วไปคือ
resources/
└── resource-name/
└── fxmanifest.lua
ตัวอย่าง
resources/
└── my-garage/
├── fxmanifest.lua
├── client.lua
└── server.lua
ไม่ควรเป็น
resources/
└── my-garage/
└── my-garage/
└── fxmanifest.lua
หากมี Folder ซ้อนผิด FiveM อาจไม่พบ Resource ตามชื่อที่คาดไว้
ดังนั้นหลังแตก ZIP ควรเปิด Folder ตรวจ Manifest ก่อนทุกครั้ง
③ fxmanifest.lua ตัวอย่างพื้นฐาน
สำหรับ Script Lua แบบง่าย สามารถเริ่มต้นได้ดังนี้
fx_version 'cerulean'
game 'gta5'
author 'YourName'
description 'My FiveM Script'
version '1.0.0'
client_script 'client.lua'
server_script 'server.lua'
แต่ละส่วนมีหน้าที่แตกต่างกัน
fx_version
→ กำหนด FXv2 manifest version
game
→ ระบุเกมที่ Resource รองรับ
author
→ ผู้พัฒนา
description
→ คำอธิบาย Resource
version
→ เวอร์ชัน Resource
client_script
→ ไฟล์ทำงานฝั่ง Client
server_script
→ ไฟล์ทำงานฝั่ง Server
author, description และ version เป็น Metadata ที่ช่วยให้ Resource จัดการง่ายขึ้น แต่สิ่งสำคัญในการทำงานจริงคือ Directive ที่กำหนด Runtime และไฟล์ที่จะโหลด
④ fx_version คืออะไร
fx_version ใช้กำหนดระดับความสามารถของ Resource Manifest
รูปแบบที่พบใน Resource ปัจจุบันคือ
fx_version 'cerulean'
เอกสาร Cfx.re ปัจจุบันระบุว่า cerulean เป็น FXv2 Resource Version ปัจจุบัน
ดังนั้น Resource ใหม่โดยทั่วไปสามารถเริ่มด้วย
fx_version 'cerulean'
game 'gta5'
ไม่ควร Copy Manifest เก่ามากจาก Tutorial หลายปีก่อนมาใช้โดยไม่ตรวจเอกสารปัจจุบัน
⑤ game 'gta5' คืออะไร
สำหรับ FiveM ใช้
game 'gta5'
เพื่อระบุว่า Resource รองรับ GTA V API Set
ตัวอย่าง
fx_version 'cerulean'
game 'gta5'
ถ้าเป็น RedM จะใช้ Game API คนละตัว
สำหรับบทความ FiveM นี้ Resource ทั่วไปจึงใช้
game 'gta5'
เป็นหลัก
⑥ games ใช้หลายเกมได้หรือไม่
Manifest รองรับรูปแบบ
games {
'gta5',
'rdr3'
}
หาก Resource ถูกออกแบบให้รองรับหลาย Game API
แต่ FiveM Script ทั่วไปที่สร้างเฉพาะ GTA V ใช้
game 'gta5'
ก็เพียงพอ
ไม่จำเป็นต้องใส่หลายเกมหาก Resource ไม่ได้รองรับจริง
⑦ client_script คืออะไร
client_script ใช้กำหนด Script ที่ต้องโหลดฝั่ง Client หรือเครื่องผู้เล่น
ตัวอย่าง
client_script 'client.lua'
หรือระบุ Path
client_script 'client/main.lua'
Client Script มักใช้ทำงาน เช่น
Marker
NPC
Animation
Camera
Controls
Menu
UI Interaction
Target
Vehicle Logic บางส่วน
หาก Path ใน Manifest ผิด Client Script ก็อาจไม่ถูกโหลด
ตัวอย่าง Manifest ระบุ
client_script 'client.lua'
แต่ไฟล์จริงคือ
client/main.lua
ต้องแก้ให้ตรง เช่น
client_script 'client/main.lua'
⑧ client_scripts ใช้หลายไฟล์อย่างไร
ถ้ามีหลาย Client Script สามารถใช้
client_scripts {
'client/main.lua',
'client/menu.lua',
'client/vehicle.lua'
}
หรือใช้ Globbing
client_scripts {
'client/*.lua'
}
ซึ่งหมายถึงโหลดไฟล์ .lua ที่ตรง Pattern ใน Folder client
เหมาะกับ Resource ที่แบ่ง Code เป็นหลายไฟล์
ตัวอย่าง
client/
├── main.lua
├── menu.lua
├── target.lua
└── vehicle.lua
จากนั้น Manifest สามารถเขียน
client_scripts {
'client/*.lua'
}
ได้
⑨ server_script คืออะไร
server_script ใช้โหลด Script ฝั่ง Server
ตัวอย่าง
server_script 'server.lua'
หรือ
server_script 'server/main.lua'
Server Script มักเกี่ยวกับ
Player Data
Database
Money
Items
Jobs
Permissions
Server Events
Callbacks
Logging
ตัวอย่าง Resource
my-script/
├── fxmanifest.lua
├── client/
│ └── main.lua
└── server/
└── main.lua
Manifest
client_script 'client/main.lua'
server_script 'server/main.lua'
⑩ server_scripts ใช้หลายไฟล์อย่างไร
ใช้รูปแบบ
server_scripts {
'server/main.lua',
'server/database.lua',
'server/callbacks.lua'
}
หรือ
server_scripts {
'server/*.lua'
}
แต่ต้องระวัง ลำดับการโหลดไฟล์
ถ้า main.lua เรียก Function ที่ประกาศอยู่ในไฟล์อื่นซึ่งยังไม่ถูกโหลด อาจเกิด Error ได้
ดังนั้น Resource ที่มี Dependency ระหว่างไฟล์ภายในควรจัดลำดับอย่างชัดเจนแทนการใช้ Wildcard แบบไม่คิด
⑪ shared_script คืออะไร
shared_script ใช้โหลด Script ทั้งฝั่ง Client และ Server
ตัวอย่าง
shared_script 'config.lua'
เหมาะกับข้อมูล เช่น
Config = {}
Config.Locale = 'th'
Config.Job = 'police'
ที่ทั้ง Client และ Server ต้องใช้
ถ้ามีหลายไฟล์
shared_scripts {
'shared/config.lua',
'shared/functions.lua'
}
หรือ
shared_scripts {
'shared/*.lua'
}
⑫ อย่าใส่ Password ใน shared_script
นี่เป็นเรื่องสำคัญด้านความปลอดภัย
ไฟล์ที่ถูกส่งหรือใช้งานฝั่ง Client ไม่ควรเก็บ Secret เช่น
Database Password
API Secret
Private Token
Server Secret
ตัวอย่างที่ไม่ควรทำ
Config.DatabasePassword = 'secret-password'
ใน Shared File
เพราะข้อมูลที่ Client สามารถได้รับไม่ควรถูกถือว่าเป็นความลับ
ค่าลับควรอยู่ฝั่ง Server เท่านั้น และควรจัดการตามระบบ Config/Environment ที่เหมาะสม
⑬ shared_script กับ @ox_lib/init.lua
Resource ที่ใช้ ox_lib มักพบรูปแบบ
shared_script '@ox_lib/init.lua'
@resource/path หมายถึงการอ้างไฟล์จาก Resource อื่น
ตัวอย่าง
@ox_lib/init.lua
หมายถึงไฟล์ init.lua จาก Resource ox_lib
ถ้า Server ไม่มี ox_lib, ชื่อ Resource ถูกเปลี่ยน หรือ ox_lib ไม่พร้อม Resource ที่ใช้บรรทัดนี้อาจเกิด Error
จึงเป็นอีกเหตุผลว่าทำไม Dependency และชื่อ Resource ต้องถูกต้อง
⑭ files คืออะไร
files ใช้กำหนดไฟล์ที่ Resource ต้องรวมใน Resource Packfile เพื่อให้ Client ใช้งาน
ตัวอย่าง
files {
'html/index.html',
'html/style.css',
'html/script.js'
}
มักใช้กับ
NUI
HTML
CSS
JavaScript
Images
Audio
Data Files
Assets บางประเภท
ตัวอย่างโครงสร้าง
html/
├── index.html
├── style.css
└── script.js
Manifest
files {
'html/index.html',
'html/style.css',
'html/script.js'
}
ถ้า UI เรียกไฟล์ที่ไม่ได้ถูกประกาศหรือ Package ไม่ครบ อาจทำให้ Interface แสดงผิดหรือไม่ทำงาน
⑮ file กับ files ต่างกันอย่างไร
ถ้ามีไฟล์เดียวสามารถใช้
file 'html/index.html'
ถ้ามีหลายไฟล์ใช้
files {
'html/index.html',
'html/style.css',
'html/script.js'
}
แนวคิดคล้าย
client_script
client_scripts
และ
dependency
dependencies
คือแบบเอกพจน์กับหลายรายการ
⑯ ui_page คืออะไร
Resource ที่มี NUI สามารถกำหนดหน้า UI ด้วย
ui_page 'html/index.html'
และต้องรวมไฟล์ที่เกี่ยวข้องผ่าน files
ตัวอย่าง
ui_page 'html/index.html'
files {
'html/index.html',
'html/style.css',
'html/script.js'
}
เอกสาร Cfx.re ระบุว่า ถ้า ui_page ชี้ไปยังไฟล์ภายใน Resource ไฟล์นั้นและ Dependency ของมันต้องถูกอ้างผ่าน files
ดังนั้นถ้า Resource Started แต่ UI ไม่ขึ้น ควรตรวจทั้ง
ui_page
files
File Path
F8
NUI Error
⑰ ui_page ใช้ URL ได้หรือไม่
Manifest รองรับ Absolute URL สำหรับ ui_page ได้ด้วย
เช่นเชิงโครงสร้าง
ui_page 'https://example.com/ui/index.html'
อย่างไรก็ตาม Server ส่วนใหญ่ที่ต้องการความเสถียรควรพิจารณาผลกระทบเรื่อง Availability, Security และ Dependency ภายนอกด้วย
ถ้า External UI ล่ม Script อาจได้รับผลกระทบทั้งที่ FiveM Resource ยัง Started อยู่
⑱ dependency คืออะไรใน fxmanifest.lua
ใช้กำหนด Resource ที่ต้องโหลดก่อน
ตัวอย่าง
dependency 'ox_lib'
หรือหลายตัว
dependencies {
'ox_lib',
'oxmysql'
}
ถ้า Script ต้องใช้ Resource เหล่านี้จริง ควรประกาศตามการออกแบบของ Developer
Dependency ช่วยให้ FiveM เข้าใจความสัมพันธ์ของ Resource และลดปัญหาการ Start Resource ลูกก่อน Resource หลัก
⑲ Runtime Constraints ใน dependency คืออะไร
Dependency สามารถใช้กำหนด Requirement ของ Environment ได้ด้วย
ตัวอย่าง
dependencies {
'/server:4500',
'/onesync',
'/gameBuild:h4'
}
FiveM รองรับ Constraint ประเภท
server
policy
onesync
gameBuild
native
ดังนั้น Error Dependency บางครั้งไม่ได้แปลว่าขาด Script
อาจหมายถึง FXServer หรือ Game Build ไม่ผ่าน Requirement
ไม่ควรลบ Constraint ออกเพื่อบังคับให้ Resource Start หาก Code ต้องใช้ Feature นั้นจริง
⑳ exports ใน fxmanifest.lua คืออะไร
Resource สามารถเปิด Function ให้ Resource อื่นเรียกผ่าน Export
Manifest มี Directive export และ server_export
ตัวอย่างแบบเก่าอาจพบ
export 'MyFunction'
อย่างไรก็ตามเอกสาร Cfx.re ปัจจุบันแนะนำว่าฝั่ง Lua/JS สามารถใช้รูปแบบ exports() ใน Code ได้แทนการประกาศ Export ด้วย Manifest ในหลายกรณี
ตัวอย่างเชิงแนวคิด
exports('getData', function()
return 'hello'
end)
เรื่อง Exports จะมีรายละเอียดอีกมาก และควรแยกเรียนต่างหาก เพราะเกี่ยวข้องกับการสื่อสารระหว่าง Resources
㉑ data_file คืออะไร
data_file ใช้เพิ่ม Data File ของ GTA V เข้า Extra Content System
พบได้บ่อยกับ Resource ประเภท
Vehicle
Handling
Audio
Weapons
Maps
Meta Files
ตัวอย่างเชิงโครงสร้าง
files {
'vehicles.meta',
'handling.meta'
}
data_file 'VEHICLE_METADATA_FILE' 'vehicles.meta'
data_file 'HANDLING_FILE' 'handling.meta'
ถ้าเพิ่มรถแล้วรถ Spawn ได้แต่ Handling หรือข้อมูลบางส่วนผิด อาจต้องตรวจ data_file และ .meta ไม่ใช่ Client Script
㉒ ตัวอย่าง fxmanifest.lua สำหรับรถ FiveM
ตัวอย่างเชิงพื้นฐาน
fx_version 'cerulean'
game 'gta5'
files {
'data/vehicles.meta',
'data/handling.meta',
'data/carcols.meta',
'data/carvariations.meta'
}
data_file 'VEHICLE_METADATA_FILE' 'data/vehicles.meta'
data_file 'HANDLING_FILE' 'data/handling.meta'
data_file 'CARCOLS_FILE' 'data/carcols.meta'
data_file 'VEHICLE_VARIATION_FILE' 'data/carvariations.meta'
ส่วน Model และ Texture โดยทั่วไปจะอยู่ใน
stream/
แต่ประเภท data_file ที่ใช้จริงต้องตรงกับ Asset และไฟล์ของ Resource นั้น
ไม่ควร Copy Manifest รถคันหนึ่งไปใช้อีกคันโดยไม่ตรวจไฟล์
㉓ this_is_a_map คืออะไร
Map Resource สามารถพบ
this_is_a_map 'yes'
Directive นี้ใช้ระบุว่า Resource เป็น GTA Map และให้ระบบ Reload Map Storage เมื่อ Resource โหลด
ตัวอย่าง
fx_version 'cerulean'
game 'gta5'
this_is_a_map 'yes'
มักพบกับ Map/MLO Resources
แต่อย่าใส่ลงใน Script ทั่วไปที่ไม่ใช่ Map โดยไม่มีเหตุผล
㉔ server_only คืออะไร
ถ้า Resource ต้องทำงานเฉพาะฝั่ง Server สามารถพบ
server_only 'yes'
เอกสาร Cfx.re ระบุว่า Directive นี้ทำให้ Clients ไม่ต้อง Download Content ของ Resource
เหมาะกับ Resource ที่เป็น Server-only จริง ๆ
ไม่ควรเปิดให้ Script ที่มี Client Files หรือ Assets เพราะ Client จะไม่ได้รับสิ่งที่ต้องใช้
㉕ loadscreen ใช้อย่างไร
Resource สำหรับ Loading Screen สามารถกำหนด
loadscreen 'html/loadscreen.html'
พร้อมเพิ่มไฟล์
files {
'html/loadscreen.html'
}
Resource Loading Screen ที่ซับซ้อนอาจมี
HTML
CSS
JavaScript
Images
Audio
Video
และต้องประกาศไฟล์ที่จำเป็นอย่างถูกต้อง
㉖ author, description และ version จำเป็นไหม
Metadata เช่น
author 'YourName'
description 'Garage System'
version '1.2.0'
ไม่ได้เป็นตัวกำหนด Gameplay โดยตรง แต่ควรใส่เพราะช่วยในการดูแล Resource
โดยเฉพาะ version
เมื่อ Server มี Script จำนวนมาก การรู้ว่า Resource เป็น Version ไหนช่วยเรื่อง
Update
Debug
Compatibility
Rollback
Support
ได้มาก
㉗ ใช้ Comment ใน fxmanifest.lua ได้ไหม
ได้ เพราะ Manifest เป็น Lua File
ใช้
-- Client Files
client_scripts {
'client/*.lua'
}
-- Server Files
server_scripts {
'server/*.lua'
}
การ Comment ช่วยให้ Manifest อ่านง่ายขึ้น
แต่ไม่ควร Comment Directive ที่จำเป็นเพียงเพื่อให้ Error หาย
เช่น
-- dependency 'ox_lib'
ทั้งที่ Script ใช้ ox_lib จริง
นั่นเป็นการซ่อน Requirement ไม่ใช่การแก้ปัญหา
㉘ lua54 'yes' ยังต้องใช้ไหม
ไม่ต้องใช้แล้วใน FiveM ปัจจุบัน
คู่มือ FiveM เก่าจำนวนมากยังมี
lua54 'yes'
แต่เอกสาร Cfx.re ปัจจุบันระบุว่า lua54 ถูก Deprecated และไม่จำเป็นต้องเปิดอีกแล้ว
ตั้งแต่ มิถุนายน 2025 Lua 5.3 ถูก Deprecated และ Lua Scripts ทั้งหมดใช้ Lua 5.4 แล้ว
ดังนั้น Resource ใหม่ในปี 2026 ไม่จำเป็นต้องเพิ่ม
lua54 'yes'
เพียงเพื่อเปิด Lua 5.4
จุดนี้สำคัญมาก เพราะ Tutorial และ Manifest เก่าบนอินเทอร์เน็ตจำนวนมากยังมีบรรทัดนี้อยู่
㉙ มี lua54 'yes' ใน Script เก่าต้องลบทันทีไหม
ไม่จำเป็นต้องตื่นตระหนกหากพบ
lua54 'yes'
ใน Resource เก่า
ประเด็นสำคัญคือ Directive นี้ ไม่จำเป็นแล้ว
หากกำลังทำความสะอาด Manifest หรือพัฒนา Resource ใหม่ ควรยึดเอกสารปัจจุบัน
แต่ไม่ควรแก้ Resource Production หลายตัวพร้อมกันเพียงเพราะเห็น Directive Deprecated หากยังไม่ได้ทดสอบผลกระทบ
㉚ node_version คืออะไร
สำหรับ Server-side JavaScript Resource Manifest ปัจจุบันมี node_version
เช่น
node_version '22'
เอกสาร Cfx.re ระบุว่า Runtime รองรับ Node.js Version ที่กำหนดไว้ใน Manifest โดยมีตัวเลือกตามระบบปัจจุบัน
Resource JavaScript รุ่นใหม่บางตัวอาจต้องการ Node Version ใหม่กว่า Default
ดังนั้นถ้า Script JavaScript มี Requirement ด้าน Node ให้ยึด Documentation ของ Developer
ไม่ควรเพิ่ม node_version '22' ให้ทุก Resource โดยอัตโนมัติ
㉛ escrow_ignore คืออะไร
Resource ที่ใช้ FiveM Asset Escrow สามารถกำหนดไฟล์ที่ไม่ต้องถูก Protect ได้
ตัวอย่าง
escrow_ignore {
'config.lua',
'locales/*.lua'
}
แนวคิดคือให้เจ้าของ Server สามารถแก้ Config หรือ Locale บางไฟล์ได้ แม้ Source ส่วนอื่นจะถูก Asset Escrow Protect
Directive นี้มีประโยชน์สำหรับ Developer ที่สร้าง Resource สำหรับจำหน่าย
ผู้ใช้งาน Script ทั่วไปไม่ควรเพิ่มหรือลบค่า Escrow แบบสุ่มหากไม่ได้เป็นผู้พัฒนา Resource
㉜ provide คืออะไร
Manifest มี Directive
provide 'resource-name'
ใช้ระบุว่า Resource ปัจจุบันสามารถทำหน้าที่แทน Resource อื่นในระบบ Dependency ได้
ตัวอย่างในเอกสารมีแนวคิดประมาณ
provide 'mysql-async'
หมายถึง Resource ปัจจุบันประกาศตัวเป็น Replacement สำหรับ Resource นั้น
เป็น Feature ขั้นสูงที่ไม่จำเป็นสำหรับ Script ทั่วไป
ถ้าไม่เข้าใจ Dependency Replacement ไม่ควรเพิ่ม provide เพียงเพื่อแก้ Missing Dependency
㉝ use_experimental_fxv2_oal คืออะไร
Manifest ยังมี
use_experimental_fxv2_oal 'yes'
สำหรับ OAL หรือ One Argument List
เอกสาร Cfx.re ระบุชัดว่า Feature นี้ยังเป็น Experimental
แม้มีเป้าหมายด้านการเรียก Native และ Performance แต่มีข้อแตกต่างด้านพฤติกรรม เช่น Vector Unpacking
ดังนั้นไม่ควรเปิดเพียงเพราะเห็นคำว่า Performance
สำหรับ Production Resource ควรใช้เมื่อ Developer ทดสอบและตั้งใจรองรับจริง
㉞ __resource.lua คืออะไร
ก่อน fxmanifest.lua FiveM ใช้ Manifest รุ่นเก่าชื่อ
__resource.lua
Resource เก่าบางตัวจึงยังมีไฟล์นี้อยู่
แต่ Resource ใหม่ควรใช้
fxmanifest.lua
ไม่ควรสร้าง Resource ใหม่ด้วย Manifest Legacy
และอย่าเปลี่ยนเพียงชื่อไฟล์จาก
__resource.lua
เป็น
fxmanifest.lua
โดยไม่ตรวจ Content เพราะ Manifest รุ่นเก่าอาจต้องปรับ Directive ให้เข้ากับรูปแบบใหม่ด้วย
㉟ resource_manifest_version ยังควรใช้ไหม
Manifest เก่ามากอาจมี
resource_manifest_version '...'
เอกสาร Cfx.re ระบุ Directive นี้เป็น Deprecated
Resource ใหม่ควรใช้
fx_version 'cerulean'
แทน
นี่เป็นอีกเหตุผลว่าทำไมไม่ควร Copy __resource.lua หรือ Manifest จาก Script อายุหลายปีมาเป็น Template ของ Resource ใหม่
㊱ fxmanifest.lua โหลด Lua, JavaScript และ C# ได้หรือไม่
ได้
Resource Manifest รองรับ Script Runtime หลายภาษา
ตัวอย่าง Lua
client_script 'client.lua'
JavaScript
client_script 'client.js'
หรือ Resource ที่ใช้ .NET/C# ก็สามารถประกาศไฟล์ที่เกี่ยวข้องตาม Runtime ของ FiveM ได้
ดังนั้น fxmanifest.lua ไม่ได้หมายความว่า Resource ต้องเขียนด้วย Lua
ตัว Manifest เป็น Lua แต่ Script ภายในสามารถเป็น Runtime อื่นที่ FiveM รองรับได้
㊲ Wildcard หรือ Globbing คืออะไร
Directive หลายตัวรองรับ Globbing
เช่น
client_scripts {
'client/*.lua'
}
หรือ
files {
'html/**/*'
}
แนวคิดคือไม่ต้องระบุไฟล์ทีละชื่อ
แต่ควรใช้ด้วยความระมัดระวัง
เพราะถ้า Folder มีไฟล์ Development หรือไฟล์ที่ไม่ควรถูกโหลดรวมอยู่ Pattern ที่กว้างเกินไปอาจรวมไฟล์เกินความจำเป็น
สำหรับ Script ที่ต้องการลำดับไฟล์ชัดเจน การระบุทีละไฟล์อาจปลอดภัยกว่า
㊳ ลำดับไฟล์ใน fxmanifest.lua สำคัญไหม
สำคัญเมื่อ Script ภายในพึ่งพากัน
ตัวอย่าง
shared_scripts {
'shared/config.lua',
'shared/functions.lua'
}
ถ้า functions.lua ต้องใช้ Config ก็เหมาะที่จะให้ Config โหลดก่อน
ฝั่ง Server เช่น
server_scripts {
'server/database.lua',
'server/main.lua'
}
ถ้า main.lua ต้องเรียก Function จาก database.lua ตั้งแต่ Initialization ลำดับการโหลดควรสอดคล้องกัน
อย่าใช้
server_scripts {
'server/*.lua'
}
เพียงเพราะเขียนสั้นกว่า หาก Code มี Dependency ระหว่างไฟล์และ Developerไม่ได้ออกแบบรองรับลำดับที่เกิดขึ้น
㊴ ตัวอย่าง fxmanifest.lua สำหรับ Script RP
ตัวอย่างโครงสร้างหนึ่ง
my-job/
├── fxmanifest.lua
├── config.lua
├── client/
│ ├── main.lua
│ └── target.lua
├── server/
│ ├── main.lua
│ └── database.lua
└── html/
├── index.html
├── style.css
└── script.js
Manifest อาจเป็น
fx_version 'cerulean'
game 'gta5'
author 'YourName'
description 'Example RP Job'
version '1.0.0'
shared_script 'config.lua'
client_scripts {
'client/main.lua',
'client/target.lua'
}
server_scripts {
'server/database.lua',
'server/main.lua'
}
ui_page 'html/index.html'
files {
'html/index.html',
'html/style.css',
'html/script.js'
}
dependencies {
'ox_lib',
'oxmysql'
}
นี่เป็นเพียง Template เพื่ออธิบายโครงสร้าง ไม่ได้หมายความว่า Script ทุกตัวต้องมีทุก Directive
㊵ ตัวอย่าง fxmanifest.lua สำหรับ Script ไม่มี UI
ถ้า Resource ง่ายมาก
my-script/
├── fxmanifest.lua
├── config.lua
├── client.lua
└── server.lua
Manifest สามารถสั้นเพียง
fx_version 'cerulean'
game 'gta5'
shared_script 'config.lua'
client_script 'client.lua'
server_script 'server.lua'
ไม่จำเป็นต้องเพิ่ม
ui_page
files
data_file
dependency
หาก Script ไม่ได้ใช้
หลักที่ดีคือ ใส่เฉพาะสิ่งที่ Resource ต้องการจริง
㊶ fxmanifest.lua Error แก้อย่างไร
หาก Resource ไม่ Start หลังแก้ Manifest ให้ตรวจ Syntax
ตัวอย่างผิด
fx_version 'cerulean
Quote ปิดหาย
หรือ
client_scripts {
'client.lua',
'menu.lua'
ไม่มี }
หรือ
files {
'html/index.html'
'html/style.css'
}
ลืม Comma ระหว่างรายการ
ข้อผิดพลาดที่พบได้บ่อย ได้แก่
Quote ไม่ครบ
Comma หาย
{ } ไม่ครบ
Path ผิด
ชื่อไฟล์ผิด
Directive สะกดผิด
ถ้า Resource เคยทำงานได้แล้วเพิ่ง Error หลังแก้ Manifest ให้ย้อนดูการเปลี่ยนแปลงล่าสุดก่อน
㊷ does not have a resource manifest แก้อย่างไร
ถ้า FiveM แจ้งว่า Resource ไม่มี Manifest ให้ตรวจ
resources/resource-name/fxmanifest.lua
ว่ามีจริงหรือไม่
ระวัง Windows ซ่อน File Extension
ไฟล์ที่เห็นเป็น
fxmanifest.lua
อาจเป็นจริง ๆ ว่า
fxmanifest.lua.txt
ต้องเปิด File Extensions แล้วตรวจชื่อให้ถูกต้อง
หาก Download จาก GitHub ให้ตรวจด้วยว่า Folder ที่นำมาใช้เป็น Resource จริงหรือเป็นเพียง Project Root
㊸ fxmanifest.lua อยู่แต่ FiveM หา Resource ไม่เจอ
ให้ตรวจโครงสร้าง
ผิด
resources/
└── my-script/
└── my-script/
└── fxmanifest.lua
ถูก
resources/
└── my-script/
└── fxmanifest.lua
จากนั้นใช้
refresh
ensure my-script
หากยังหาไม่พบ ให้ตรวจ Server Data Path และ txAdmin Profile ว่ากำลังใช้ Folder ชุดเดียวกับที่นำ Resource ไปวางจริงหรือไม่
㊹ แก้ fxmanifest.lua แล้วต้อง Restart Server ไหม
ไม่จำเป็นทุกครั้ง
หาก Server เปิดอยู่ สามารถใช้
refresh
ensure my-script
เพื่อให้ Server Rescan Manifest และ Start/Restart Resource
แต่ควรอ่าน Console หลังจากนั้นทันที
สำหรับ Resource Core หรือ Resource ที่ไม่รองรับ Hot Restart ดี การ Restart Server ทั้งชุดในช่วง Maintenance อาจเหมาะกว่า
㊺ fxmanifest.lua ควรใส่ dependency ทุกตัวหรือไม่
ไม่จำเป็นต้องใส่สิ่งที่ไม่ใช่ Hard Dependency ทุกอย่างลง Manifest
ตัวอย่าง Script รองรับ
ox_target
qb-target
อย่างใดอย่างหนึ่ง
การบังคับ
dependencies {
'ox_target',
'qb-target'
}
จะผิดแนวคิด เพราะ Server อาจเลือกใช้เพียงตัวเดียว
Optional Integration ควรจัดการตาม Architecture และ Config ของ Script
Dependency ใน Manifest ควรสะท้อน Requirement ที่ Resource ต้องมีจริง
㊻ fxmanifest.lua ควรใส่ Config ก่อน Script หลักไหม
ถ้า Client และ Server ต้องใช้ Config ร่วมกัน สามารถกำหนด
shared_script 'config.lua'
ก่อน Script หลัก
ตัวอย่าง
shared_script 'config.lua'
client_script 'client.lua'
server_script 'server.lua'
ทำให้ Config ถูกโหลดใน Runtime ที่กำหนดก่อน Script ที่ต้องใช้มัน
สำหรับ Resource ใหญ่ควรจัด Shared/Common Files ให้ชัดเจน ไม่ควรประกาศไฟล์แบบสุ่ม
㊼ วิธีตรวจ fxmanifest.lua ของ Script ที่ดาวน์โหลดมา
ก่อน Start Script ใหม่ ให้เปิด Manifest แล้วตรวจอย่างน้อย
FX Version
fx_version 'cerulean'
หรือรูปแบบที่ Resource ใช้
Game
game 'gta5'
Script Paths
client_scripts
server_scripts
shared_scripts
UI
ui_page
files
Dependency
dependency
dependencies
Data
data_file
Requirement อื่น
server_only
this_is_a_map
escrow_ignore
node_version
ไม่จำเป็นต้องเข้าใจทุก Directive ในวันแรก แต่ต้องรู้ว่า Resource กำลังประกาศอะไร
㊽ อย่า Copy fxmanifest.lua จาก Script อื่นแบบตรง ๆ
Script แต่ละตัวมีโครงสร้างต่างกัน
Script A อาจมี
client.lua
server.lua
แต่ Script B มี
client/main.lua
server/main.lua
html/
data/
การ Copy Manifest A ไปใส่ B อาจทำให้ไฟล์จำนวนมากไม่ถูกโหลด
ถ้าต้องสร้าง Manifest เอง ควรเขียนจาก โครงสร้าง Resource จริง ไม่ใช่จาก Template ที่ไม่เกี่ยวข้อง
㊾ fxmanifest.lua ที่ดีควรเป็นอย่างไร
Manifest ที่ดีควร
อ่านง่าย
ระบุไฟล์ตรงกับ Resource จริง
แยก Client/Server/Shared ชัดเจน
ระบุ Dependency ที่จำเป็น
ไม่มี Directive Deprecated โดยไม่จำเป็น
ไม่มี File Path ที่ไม่ใช้แล้ว
ไม่โหลดไฟล์เกินจำเป็น
มี Metadata Version ชัดเจน
ใช้ Comment เท่าที่ช่วยให้อ่านง่าย
ไม่จำเป็นต้องยาว
Manifest ที่ดีที่สุดคือ Manifest ที่ ตรงกับ Architecture ของ Resource และไม่มีของเก่าหรือของเกิน
㊿ Checklist fxmanifest.lua FiveM
ก่อนถือว่า Manifest พร้อมใช้งาน ตรวจตามนี้
พื้นฐาน
ไฟล์ชื่อ
fxmanifest.luaอยู่ Root ของ Resource
fx_versionถูกgame 'gta5'ถูก
Scripts
Client Paths ถูก
Server Paths ถูก
Shared Paths ถูก
File มีอยู่จริง
ลำดับการโหลดเหมาะสม
UI
ui_pageถูกHTML มีจริง
CSS/JS ถูกประกาศใน
filesBuild Folder มีครบ
Dependency
Hard Dependency ถูกระบุ
Dependency ติดตั้งแล้ว
Resource Name ตรง
Start Order ถูก
Assets
filesครบdata_fileถูกประเภทstreamมี Asset ที่ต้องใช้
ปัจจุบัน
ไม่จำเป็นต้องใช้
lua54 'yes'ไม่ใช้
resource_manifest_versionสำหรับ Resource ใหม่ไม่เริ่ม Resource ใหม่ด้วย
__resource.lua
หลังแก้
ใช้
refresh
ensure resource-name
แล้วตรวจ Server Console และ F8
สรุป fxmanifest.lua FiveM คืออะไร
fxmanifest.lua คือ Resource Manifest ที่เป็นหัวใจของ FiveM Resource เพราะบอก FXServer ว่า Resource นี้รองรับอะไรและต้องโหลดไฟล์ใด
โครงสร้างพื้นฐานสามารถเริ่มจาก
fx_version 'cerulean'
game 'gta5'
client_script 'client.lua'
server_script 'server.lua'
หาก Resource ซับซ้อนขึ้น สามารถเพิ่ม
shared_scripts
files
ui_page
dependencies
data_file
this_is_a_map
server_only
escrow_ignore
ตามความจำเป็น
จุดที่ควรจำมากที่สุดสำหรับปี 2026 คือ ไม่ต้องใส่ lua54 'yes' เพื่อเปิด Lua 5.4 แล้ว เพราะ FiveM ใช้ Lua 5.4 เป็นมาตรฐานอยู่แล้ว และ Directive นี้ถูก Deprecated
อีกเรื่องที่สำคัญคือ fxmanifest.lua ไม่ควรถูก Copy จาก Resource อื่นแบบสุ่ม เพราะ Client Files, Server Files, UI, Dependency และ Data Files ของแต่ละ Resourceแตกต่างกัน
แนวทางของ comsiam คือทุกครั้งที่ติดตั้ง Script ใหม่ ให้เปิด fxmanifest.lua ดูก่อน Start Resource อย่างน้อยหนึ่งครั้ง เพราะเพียงไฟล์เดียวสามารถบอกได้ว่า Script ใช้ Client, Server, Library, UI และ Dependency อะไรบ้าง
สำหรับคนที่กำลังเรียนพัฒนา FiveM Script comsiam แนะนำให้เข้าใจ fxmanifest.lua ให้แม่นก่อนเรื่อง Framework เพราะไม่ว่าจะใช้ ESX, QBCore, Qbox หรือ OX สุดท้าย Resource ต่าง ๆ ก็ยังต้องมีโครงสร้างและ Manifest ที่ FiveM สามารถอ่านได้อย่างถูกต้อง
Comments
Post a Comment