FiveM fx_version cerulean คืออะไร? ทำไม fxmanifest.lua ส่วนใหญ่ใช้ cerulean
FiveM fx_version 'cerulean' คือการกำหนด FXv2 Resource Manifest Version ว่า Resource ต้องการใช้ Feature Set ของ cerulean ซึ่งเป็น FX Version ปัจจุบันตามเอกสาร Cfx.re และจะได้รับความสามารถที่สืบทอดมาจาก Manifest Versions ก่อนหน้าอย่าง adamant และ bodacious ด้วย
ตัวอย่างที่พบแทบทุก Resource FiveM สมัยใหม่คือ
fx_version 'cerulean'
game 'gta5'
cerulean ไม่ใช่
เวอร์ชัน FiveM Server
เวอร์ชัน GTA V
เวอร์ชัน Lua
Game Build
OneSync Mode
แต่มันคือ Resource Manifest Feature Version
หน้าที่ของมันคือบอก FiveM ว่า
Resource นี้
↓
ใช้ Manifest Behavior
และ Feature Set
ระดับ cerulean
หนึ่งในการเปลี่ยนแปลงสำคัญของ cerulean คือ NUI ถูกโหลดใน Secure Context ทำให้สามารถใช้ Web APIs สมัยใหม่อย่าง WASM และ fetch ได้เหมาะสมขึ้น และ NUI Callback URL ต้องใช้ https:// แทน http:// แบบเก่า
① fx_version คืออะไร
fx_version เป็น Directive ใน fxmanifest.lua
ตัวอย่าง
fx_version 'cerulean'
หน้าที่คือกำหนด Version ของ Feature Set ที่ Resource Manifest ใช้
เอกสาร Cfx.re อธิบายว่าแต่ละ FX Version จะสืบทอด Features จาก Version ก่อนหน้า ยกเว้นกรณีที่ Feature ใหม่ Override Behavior เดิม
จึงสามารถมองเป็น
adamant
↓
bodacious
↓
cerulean
โดย cerulean ได้ความสามารถเดิมพร้อม Behavior ใหม่ของตัวเอง
② cerulean คืออะไร
cerulean คือชื่อของ FXv2 Resource Version ที่เปิดตัวช่วงเดือนพฤษภาคม 2020
เขียนใน Manifest แบบนี้
fx_version 'cerulean'
และสำหรับ FiveM ใช้คู่กับ
game 'gta5'
ดังนั้น Resource ใหม่ทั่วไปมักเริ่มด้วย
fx_version 'cerulean'
game 'gta5'
③ cerulean เป็นเวอร์ชันปัจจุบันหรือไม่
ตามเอกสาร Resource Manifest ของ Cfx.re ปัจจุบัน cerulean ถูกระบุว่าเป็น Current FXv2 Resource Version
ดังนั้นหากกำลังสร้าง Resource ใหม่และไม่มี Requirement พิเศษ การเริ่มจาก
fx_version 'cerulean'
เป็นตัวเลือกมาตรฐาน
ไม่จำเป็นต้องย้อนกลับไปใช้ adamant หรือ bodacious สำหรับ Resource ใหม่ทั่วไป
④ fx_version อยู่ตรงไหน
อยู่ใน
fxmanifest.lua
ตัวอย่าง
my_resource/
├── fxmanifest.lua
├── client.lua
└── server.lua
ภายใน Manifest
fx_version 'cerulean'
game 'gta5'
client_script 'client.lua'
server_script 'server.lua'
ควรวางไว้ช่วงต้นเพื่อให้อ่าน Resource Requirement ได้ง่าย
⑤ cerulean เป็น Server Artifact Version หรือไม่
ไม่
ต้องแยก
fx_version
→ Resource Manifest Feature Set
กับ
FXServer Artifact
→ Server Runtime Build
ออกจากกัน
ตัวอย่าง
fx_version 'cerulean'
ไม่ได้หมายความว่า Server Artifact เป็น Version cerulean
⑥ cerulean เป็น GTA Game Build หรือไม่
ไม่
Game Build เป็นอีกระบบหนึ่ง
เช่น Resource อาจต้องการ Game Build เฉพาะ
dependency '/gameBuild:h4'
หรือ Server อาจตั้ง Game Build ตาม Configuration ที่เกี่ยวข้อง
ดังนั้น
cerulean
≠
GTA DLC Build
⑦ cerulean เป็น Lua Version หรือไม่
ไม่
นี่เป็นจุดที่คนเริ่มต้นสับสนได้ง่าย
fx_version 'cerulean'
ไม่ได้หมายถึง
Lua 5.4
fx_version กับ Lua Runtime Version เป็นคนละระบบ
ปัจจุบัน Lua Scripts ของ FiveM ใช้ Lua 5.4 อยู่แล้ว และ Directive lua54 'yes' ถูก Deprecated
⑧ ต้องใส่ lua54 'yes' คู่กับ cerulean ไหม
ไม่ต้องแล้ว
Manifest เก่าอาจมี
fx_version 'cerulean'
game 'gta5'
lua54 'yes'
สำหรับ Resource ปัจจุบันสามารถเขียน
fx_version 'cerulean'
game 'gta5'
โดยไม่ต้องใช้ lua54 'yes'
เพราะ Cfx.re ระบุ Directive นี้เป็น Deprecated แล้ว
⑨ cerulean เปิด OneSync หรือไม่
ไม่
บรรทัด
fx_version 'cerulean'
ไม่มีหน้าที่เปิด OneSync
OneSync เป็น Server Configuration/Runtime Feature แยกต่างหาก
ถ้า Resource ต้องการ OneSync สามารถประกาศ Requirement เพิ่ม
dependency '/onesync'
แต่ตัว cerulean เองไม่ได้เปิด OneSync
⑩ cerulean เพิ่ม Player Slots หรือไม่
ไม่
จำนวน Slots ถูกควบคุมด้วย Configuration เช่น
sv_maxclients 48
และสิทธิ์ของ Server
ดังนั้น
fx_version cerulean
≠
เพิ่มจำนวนผู้เล่น
⑪ cerulean ทำให้ Script เร็วขึ้นไหม
ไม่ควรตีความว่า
fx_version 'cerulean'
เป็น Performance Toggle
มันกำหนด Resource Feature/Compatibility Behavior
Resource จะเร็วหรือช้าขึ้นอยู่กับ
Threads
Native Calls
Events
Database
NUI
Entity Logic
Network Payload
มากกว่า
⑫ Feature สำคัญที่สุดของ cerulean คืออะไร
Feature ที่เอกสารระบุโดยตรงคือ
NUI Resources ถูกโหลดใน Secure Context
เพื่อรองรับ Browser Features เช่น
WASM
fetch APIs
Secure Context Web APIs
และทำให้ NUI Callback ต้องเปลี่ยนไปใช้
https://
แทน Pattern http:// รุ่นเก่า
⑬ Secure Context คืออะไร
NUI ของ FiveM ใช้ Chromium Embedded Framework
Web Features สมัยใหม่บางอย่างต้องการ Secure Context
cerulean จึงเปลี่ยน NUI Resource Loading ให้ทำงานใน Secure Context
Concept:
NUI
↓
Secure Context
↓
Modern Browser APIs
นี่เป็นความเปลี่ยนแปลงหลักที่ Cfx.re ระบุสำหรับ FX Version นี้
⑭ cerulean มีผลกับ NUI Callback อย่างไร
ใน Resource ที่ใช้ cerulean NUI Callback Request ควรใช้
https://
ตัวอย่าง JavaScript
fetch(
`https://${GetParentResourceName()}/close`,
{
method: 'POST',
headers: {
'Content-Type':
'application/json'
},
body: JSON.stringify({})
}
)
แทน Pattern http:// แบบเก่า
⑮ ตัวอย่าง NUI Callback แบบ cerulean
JavaScript
fetch(
`https://${GetParentResourceName()}/buy`,
{
method: 'POST',
headers: {
'Content-Type':
'application/json'
},
body: JSON.stringify({
item: 'water'
})
}
)
client.lua
RegisterNUICallback(
'buy',
function(data, cb)
print(
data.item
)
cb({
ok = true
})
end
)
https:// เป็นสิ่งสำคัญสำหรับ NUI Resource ที่ใช้ Secure Context
⑯ Tutorial เก่าใช้ http:// ทำอย่างไร
อาจพบ Code แบบ
fetch(
'http://my_resource/callback',
options
)
ถ้า Resource ใช้
fx_version 'cerulean'
ควรเปลี่ยนเป็น
fetch(
'https://my_resource/callback',
options
)
หรือใช้
GetParentResourceName()
เพื่อไม่ Hardcode Resource Name
⑰ ทำไมไม่ควร Hardcode Resource Name ใน NUI
ไม่ควรเขียน
fetch(
'https://my_garage/close'
)
หาก Resource อาจถูก Rename
ควรใช้
const resourceName =
GetParentResourceName()
แล้ว
fetch(
`https://${resourceName}/close`,
options
)
ช่วยให้ Resource Rename ได้ง่ายกว่า
⑱ GetParentResourceName คืออะไร
เป็น NUI Function ที่ใช้หา Resource Name ของ NUI ปัจจุบัน
ตัวอย่าง
const resource =
GetParentResourceName()
แล้วใช้ Callback URL
`https://${resource}/close`
เหมาะกับ Resource ที่ถูกแจกและอาจถูกเปลี่ยนชื่อ Folder
⑲ NUI Resource URL ยังใช้ nui:// ไหม
เอกสาร Fullscreen NUI ปัจจุบันระบุว่า nui:// เป็นรูปแบบเดิม และ Browser รุ่นใหม่ไม่ได้มองเป็น Secure Context แล้ว
Resource Files สามารถถูกอ้างผ่าน Secure Resource URL เช่น
https://cfx-nui-resourceName/file
ตาม NUI Architecture ปัจจุบัน
⑳ cerulean ต่างจาก adamant อย่างไร
adamant เป็น FXv2 Version รุ่นเดือนธันวาคม 2019
Cfx.re ระบุ Feature สำคัญว่า
adamant
→ เทียบเท่า Manifest Version
44febabe-d386-4d18-afbe-5e627f4af937
→ บังคับระบุ game
→ จำเป็นสำหรับ RedM
ส่วน cerulean ใหม่กว่าและได้รับ Features จาก Versions ก่อนหน้า
㉑ adamant ต้องมี game ทำไม
ตั้งแต่ adamant Resource Manifest ต้องระบุเกม
เช่น FiveM
game 'gta5'
RedM
game 'rdr3'
ดังนั้น Manifest ปัจจุบันจึงมักเห็น
fx_version 'cerulean'
game 'gta5'
เสมอ
㉒ cerulean สืบทอด adamant ไหม
ใช่ตาม Version Inheritance ของ FXv2
cerulean ใหม่กว่า adamant
ดังนั้น Features ก่อนหน้าที่ไม่ถูก Override จะถูกสืบทอดต่อ
Concept:
adamant
↓
bodacious
↓
cerulean
ไม่จำเป็นต้องประกาศหลาย Version
㉓ ต้องเขียน adamant และ cerulean พร้อมกันไหม
ไม่
ผิด Concept เช่น
fx_version 'adamant'
fx_version 'cerulean'
เลือก Version เดียว
สำหรับ Resource ใหม่ทั่วไปใช้
fx_version 'cerulean'
เพียงรายการเดียว
㉔ bodacious คืออะไร
bodacious เป็น FXv2 Version เดือนกุมภาพันธ์ 2020
อยู่ระหว่าง
adamant
↓
bodacious
↓
cerulean
มี Behavior Changes สำคัญเกี่ยวกับ C#/CLR และ JavaScript Compatibility
㉕ bodacious เปลี่ยน C# อย่างไร
เอกสาร Cfx.re ระบุว่า bodacious Imply การใช้
clr_disable_task_scheduler
เพื่อ Server Library Compatibility
ดังนั้น Resource cerulean ก็สืบทอด Behavior ที่เกี่ยวข้องตาม Version Inheritance
㉖ bodacious เปลี่ยน JavaScript อย่างไร
เอกสารระบุว่า bodacious
does not define window
in JS contexts
เพื่อ Library Compatibility
นี่เป็นหนึ่งใน Manifest Behavior Changes ของ Version นั้น
ไม่ใช่สิ่งที่ Developer Lua ทั่วไปต้องตั้งเพิ่มเอง
㉗ cerulean สืบทอด bodacious ไหม
ใช่
Resource ที่ใช้
fx_version 'cerulean'
ได้รับ Feature Set ของ Versions ก่อนหน้าตาม Inheritance Rule
จึงไม่ต้องเขียน
adamant
bodacious
cerulean
หลายบรรทัด
㉘ ตารางเปรียบเทียบ FX Version
| FX Version | ช่วงเปิดตัว | จุดสำคัญ |
|---|---|---|
| adamant | 2019-12 | ต้องระบุ game, FXv2 รุ่นพื้นฐาน |
| bodacious | 2020-02 | C#/JS compatibility changes |
| cerulean | 2020-05 | Secure-context NUI และ https:// callbacks |
สำหรับ Resource ใหม่ทั่วไปเลือก
fx_version 'cerulean'
㉙ resource_manifest_version คืออะไร
ก่อน FXv2 Resource Manifest ใช้
resource_manifest_version
พร้อม GUID
ตัวอย่าง Resource เก่าอาจมี
resource_manifest_version
'44febabe-d386-4d18-afbe-5e627f4af937'
ปัจจุบัน Directive นี้ถูก Deprecated
ควรใช้
fx_version 'cerulean'
แทน
㉚ GUID Manifest Version ยังควร Copy ไหม
ไม่สำหรับ Resource ใหม่
ถ้าเจอ Tutorial เช่น
resource_manifest_version
'77731fab-63ca-442c-a67b-abc70f28dfa5'
แสดงว่าเป็น Resource Manifest รุ่นเก่า
อย่านำมาใช้กับ Resource ใหม่โดยไม่มีเหตุผลด้าน Compatibility
㉛ cerulean ต้องใช้กับ fxmanifest.lua เท่านั้นไหม
fx_version เป็นระบบของ FXv2 Manifest และโดยทั่วไปใช้ใน
fxmanifest.lua
Resource เก่าที่ใช้
__resource.lua
จะอยู่กับ Manifest System รุ่นก่อน
Resource ใหม่ควรย้ายมาใช้ fxmanifest.lua
㉜ ตัวอย่าง Manifest ปัจจุบันที่ดี
fx_version 'cerulean'
game 'gta5'
author 'Your Name'
description 'FiveM resource'
version '1.0.0'
shared_script 'config.lua'
client_script 'client.lua'
server_script 'server.lua'
ไม่มี Configuration ที่ไม่จำเป็น
เปิดแล้วรู้ทันทีว่า Resource ประกอบด้วยอะไร
㉝ cerulean ใช้กับ Lua Resource ได้ไหม
ได้
fx_version 'cerulean'
game 'gta5'
client_script 'client.lua'
server_script 'server.lua'
เป็นรูปแบบมาตรฐาน
㉞ cerulean ใช้กับ JavaScript ได้ไหม
ได้
fx_version 'cerulean'
game 'gta5'
client_script 'client.js'
server_script 'server.js'
Manifest ยังคงเป็น Lua Syntax
แต่ Script Runtime ถูกเลือกตาม File Type
㉟ cerulean ใช้กับ TypeScript ได้ไหม
TypeScript ต้อง Compile/Bundle เป็น JavaScript ที่ FiveM Runtime สามารถ Execute ได้
ตัวอย่าง Manifest ชี้ไป Build Output
fx_version 'cerulean'
game 'gta5'
client_script 'dist/client.js'
server_script 'dist/server.js'
cerulean ไม่ได้ Compile TypeScript ให้เอง
㊱ cerulean ใช้กับ C# ได้ไหม
ได้
C# Resource ก็ยังใช้ fxmanifest.lua
ดังนั้น cerulean ไม่ได้ผูกกับภาษาใดภาษาหนึ่ง
มันกำหนด Manifest Feature Set
㊲ cerulean ใช้กับ NUI ได้ไหม
ได้ และ Secure NUI เป็นหนึ่งใน Feature สำคัญของ Version นี้
ตัวอย่าง
fx_version 'cerulean'
game 'gta5'
client_script 'client.lua'
ui_page 'html/index.html'
files {
'html/index.html',
'html/style.css',
'html/app.js'
}
เหมาะกับ
HUD
Inventory
Phone
Garage
Character Selection
㊳ ตัวอย่าง NUI Resource ที่ถูกต้อง
fxmanifest.lua
fx_version 'cerulean'
game 'gta5'
author 'comsiam'
description 'Example NUI resource'
version '1.0.0'
client_script 'client.lua'
ui_page 'html/index.html'
files {
'html/index.html',
'html/style.css',
'html/app.js'
}
app.js
async function closeMenu() {
const resource =
GetParentResourceName()
await fetch(
`https://${resource}/close`,
{
method: 'POST',
headers: {
'Content-Type':
'application/json'
},
body:
JSON.stringify({})
}
)
}
client.lua
RegisterNUICallback(
'close',
function(data, cb)
SetNuiFocus(
false,
false
)
cb({
ok = true
})
end
)
นี่เป็น Pattern ที่เหมาะกับ Secure-context NUI
㊴ cerulean ทำให้ fetch ใช้ได้ไหม
Secure Context ที่ cerulean นำมาใช้ถูกออกแบบเพื่อรองรับ APIs อย่าง fetch และ WASM ได้เหมาะสมขึ้น
แต่ Resource ยังต้องเขียน JavaScript และ NUI Callback ให้ถูกต้องเอง
cerulean ไม่ได้สร้าง Network Request Logic ให้อัตโนมัติ
㊵ cerulean ทำให้ WASM ใช้ได้ไหม
เอกสารระบุ Secure Context เพื่อรองรับ
WASM
fetch APIs
แต่การใช้ WebAssembly จริงยังขึ้นกับ NUI Application ของคุณ
FiveM Resource Lua ทั่วไปที่ไม่มี NUI ไม่จำเป็นต้องสนใจเรื่อง WASM
㊶ Resource ไม่มี NUI ยังควรใช้ cerulean ไหม
ควรสำหรับ Resource ใหม่ทั่วไป
ถึง Resource จะมีเพียง
client.lua
server.lua
ก็สามารถใช้
fx_version 'cerulean'
game 'gta5'
ได้
เพราะ cerulean เป็น Current FXv2 Resource Version ไม่ใช่ Version สำหรับ NUI เท่านั้น
㊷ cerulean เปลี่ยน Native APIs ไหม
fx_version กำหนด Resource Feature/Compatibility Set แต่ไม่ได้หมายความว่า Native ทุกตัวถูกเลือกจาก Manifest Version นี้
Native Availability ยังอาจขึ้นกับ
Client
Server Artifact
Game Build
Runtime
API Set
ถ้าต้อง Require Server Build ควรใช้ Constraint ที่เหมาะสม
㊸ ถ้าต้องการ Server Build ใหม่ทำอย่างไร
Manifest สามารถกำหนด
dependency '/server:4500'
ตัวอย่าง
fx_version 'cerulean'
game 'gta5'
dependencies {
'/server:4500'
}
นี่คนละหน้าที่กับ fx_version
㊹ ถ้าต้องการ OneSync ทำอย่างไร
เพิ่ม
dependency '/onesync'
เช่น
fx_version 'cerulean'
game 'gta5'
dependencies {
'/onesync'
}
หมายถึง
Manifest Feature Set
→ cerulean
Runtime Requirement
→ OneSync
เป็นคนละ Layer
㊺ ถ้าต้องการ Game Build ทำอย่างไร
ใช้ Runtime Constraint เช่น
dependency '/gameBuild:h4'
ตาม Requirement
อย่าเปลี่ยน
fx_version 'cerulean'
ไปเป็นชื่อ Game Build เพราะเป็นคนละระบบ
㊻ cerulean มีผลกับ ox_lib ไหม
cerulean ไม่ได้เปิด ox_lib
หาก Resource ต้องใช้ ox_lib
dependency 'ox_lib'
หรือประกาศ Files ตามวิธีที่ Library กำหนด
Manifest Version กับ Resource Dependency เป็นคนละเรื่อง
㊼ cerulean มีผลกับ oxmysql ไหม
ไม่โดยตรง
ถ้าใช้ oxmysql
dependency 'oxmysql'
หรือ Resource Architecture ตาม Library
cerulean ไม่ได้ทำให้ Database Connection เกิดขึ้นเอง
㊽ cerulean มีผลกับ ESX/QBCore/Qbox ไหม
Framework เหล่านี้เป็น Resources/Framework Layer
cerulean เป็น Manifest Feature Version
จึงสามารถใช้ร่วมกับ
ESX
QBCore
Qbox
Standalone
ได้ทั้งหมด
ถ้า Framework Resource ต้องการ Dependency ใด ให้ประกาศแยก
㊾ Resource เก่าใช้ adamant ควรเปลี่ยนทันทีไหม
อย่าเปลี่ยน Production Resource แบบไม่ทดสอบ
Resource ง่ายจำนวนมากอาจ Migration ได้ด้วยการเปลี่ยน
fx_version 'adamant'
เป็น
fx_version 'cerulean'
แต่ถ้ามี NUI ต้องตรวจโดยเฉพาะ
http:// callbacks
↓
https:// callbacks
รวมถึง JavaScript/C# Compatibility Behavior ที่สืบทอดมาด้วย
㊿ Resource เก่าใช้ bodacious ควรเปลี่ยนไหม
Resource ใหม่ควรใช้ Current Version
แต่ Resource เก่าควร Test ก่อน Migration
ตรวจอย่างน้อย
NUI
Callbacks
JavaScript
C#
Dependencies
Client Scripts
Server Scripts
แล้วดู Console/F8 Errors
ไม่ควรเปลี่ยน Production โดยไม่ทดสอบ
51 วิธี Migration จาก adamant เป็น cerulean
เริ่มจาก
fx_version 'adamant'
game 'gta5'
เปลี่ยนเป็น
fx_version 'cerulean'
game 'gta5'
จากนั้นตรวจ NUI Code
ค้นหา
http://
โดยเฉพาะ Callback เช่น
fetch(
'http://resource/callback'
)
แล้วปรับเป็น Secure URL ตามระบบปัจจุบัน
52 วิธี Migration จาก __resource.lua
Resource เก่าอาจเป็น
__resource.lua
และมี
resource_manifest_version
'44febabe-d386-4d18-afbe-5e627f4af937'
client_script 'client.lua'
Resource ใหม่ควรเปลี่ยนเป็น
fxmanifest.lua
แล้วใช้
fx_version 'cerulean'
game 'gta5'
client_script 'client.lua'
แต่ต้องตรวจ Directives ทั้งหมดของ Resource เดิมก่อน Migration
53 cerulean กับ lua54 เป็นคนละเรื่องอย่างไร
จำง่าย ๆ
cerulean
→ Manifest Compatibility
Lua 5.4
→ Script Runtime Language Version
Resource หนึ่งอาจใช้ cerulean ตั้งแต่หลายปีก่อนในช่วงที่ Lua Runtime ยังมีสถานะต่างจากปัจจุบัน
ดังนั้นอย่าเอาสอง Version มาผูกเป็นเรื่องเดียวกัน
54 cerulean กับ Node Version
ก็เป็นคนละเรื่อง
JavaScript Server Resource สามารถกำหนด
node_version '22'
หากต้องการ Runtime ที่รองรับ
ดังนั้น
cerulean
→ Manifest Version
node_version
→ JS Server Runtime Version
แยกกัน
55 cerulean กับ game gta5 ต่างกันอย่างไร
fx_version 'cerulean'
ตอบคำถามว่า
Resource ใช้ Manifest Feature Set รุ่นไหน?
ส่วน
game 'gta5'
ตอบว่า
Resource ใช้ Game API Set ไหน?
จึงต้องมีทั้งสองรายการ
56 Error ที่พบบ่อยเกี่ยวกับ cerulean
NUI callback ไม่ทำงาน
ตรวจว่า JavaScript ยังใช้
http://
แทน
https://
หรือไม่
Resource ไม่ Start
ตรวจ
fxmanifest.lua
game 'gta5'
Syntax
Files
Dependencies
ไม่ใช่สรุปว่า cerulean มีปัญหาทันที
lua54 Warning
ถ้ายังมี
lua54 'yes'
สามารถตรวจเอกสารปัจจุบันและนำ Deprecated Directive ออก
57 cerulean ทำให้ Resource Future-proof ไหม
ใช้ Current Manifest Version ช่วยให้ Resource อยู่บน Behavior ปัจจุบัน
แต่ไม่ได้ทำให้ Resource Future-proof แบบไม่ต้องดูแล
ยังต้อง Update
Deprecated APIs
Runtime Changes
Framework APIs
Database Libraries
NUI
Server Artifacts
ตามการเปลี่ยนแปลงของ Ecosystem
58 ควรใช้ cerulean กับ Resource ใหม่ทุกตัวไหม
สำหรับ FiveM Resource ใหม่ทั่วไป ควรเริ่มด้วย
fx_version 'cerulean'
game 'gta5'
เพราะ Cfx.re ระบุ cerulean เป็น Current FXv2 Resource Version
จากนั้นเพิ่มเฉพาะ Directives ที่ Resource ต้องใช้
ไม่ต้องเพิ่ม Config เก่าหรือ Deprecated Directive
59 Checklist ตรวจ fx_version cerulean
ตรวจอย่างน้อย
① Resource ใช้ fxmanifest.lua หรือไม่?
② มี fx_version 'cerulean' หรือไม่?
③ มี game 'gta5' หรือไม่?
④ ยังใช้ resource_manifest_version เก่าหรือไม่?
⑤ ยังใช้ __resource.lua หรือไม่?
⑥ NUI ใช้ https:// callback หรือยัง?
⑦ มี http:// NUI callback เก่าหรือไม่?
⑧ ใช้ GetParentResourceName หรือไม่?
⑨ NUI Files อยู่ใน files ครบหรือไม่?
⑩ ui_page ถูกต้องหรือไม่?
⑪ ยังใส่ lua54 'yes' หรือไม่?
⑫ เข้าใจว่า cerulean ไม่ใช่ Lua Version หรือไม่?
⑬ เข้าใจว่า cerulean ไม่ใช่ OneSync หรือไม่?
⑭ Resource ต้อง /onesync เพิ่มหรือไม่?
⑮ ต้อง Require Server Build หรือไม่?
⑯ ต้อง Require Game Build หรือไม่?
⑰ JavaScript ต้องกำหนด node_version หรือไม่?
⑱ Resource เก่าถูก Test ก่อน Migration หรือยัง?
⑲ F8 มี NUI Error หรือไม่?
⑳ Server Console มี Manifest Error หรือไม่?
⑥⓪ ตัวอย่าง Manifest cerulean สำหรับ Resource Production
โครงสร้าง
com_inventory/
├── fxmanifest.lua
├── shared/
│ └── config.lua
├── client/
│ ├── main.lua
│ └── ui.lua
├── server/
│ ├── main.lua
│ └── database.lua
└── html/
├── index.html
├── style.css
└── app.js
fxmanifest.lua
fx_version 'cerulean'
game 'gta5'
author 'comsiam'
description 'FiveM inventory example'
version '1.0.0'
dependencies {
'/onesync',
'oxmysql'
}
shared_script 'shared/config.lua'
client_scripts {
'client/main.lua',
'client/ui.lua'
}
server_scripts {
'server/database.lua',
'server/main.lua'
}
ui_page 'html/index.html'
files {
'html/index.html',
'html/style.css',
'html/app.js'
}
NUI app.js
async function closeInventory() {
const resource =
GetParentResourceName()
const response =
await fetch(
`https://${resource}/close`,
{
method: 'POST',
headers: {
'Content-Type':
'application/json'
},
body:
JSON.stringify({})
}
)
return response.json()
}
client.lua
RegisterNUICallback(
'close',
function(data, cb)
SetNuiFocus(
false,
false
)
cb({
success = true
})
end
)
นี่แสดงหน้าที่ของแต่ละ Layer ชัดเจน
cerulean
→ Manifest Feature Version
gta5
→ Game API Set
/onesync
→ Runtime Requirement
oxmysql
→ Resource Dependency
ui_page
→ NUI Entry
https://
→ Secure-context NUI Callback
ไม่ควรเอาทั้งหมดมารวมว่าเป็นหน้าที่ของ cerulean
คำถามที่พบบ่อยเกี่ยวกับ FiveM fx_version cerulean
FiveM fx_version cerulean คืออะไร
คือ Current FXv2 Resource Manifest Version ที่กำหนด Feature และ Compatibility Behavior ของ Resource
เขียนอย่างไร
fx_version 'cerulean'
FiveM ต้องใส่อะไรคู่กัน
โดยทั่วไป
game 'gta5'
ดังนั้นใช้
fx_version 'cerulean'
game 'gta5'
cerulean เป็น FiveM Version ไหม
ไม่ เป็น Resource Manifest Version
cerulean เป็น GTA Build ไหม
ไม่
cerulean เป็น Lua Version ไหม
ไม่
cerulean เปิด Lua 5.4 ไหม
ไม่ใช่หน้าที่ของมัน ปัจจุบัน Lua Scripts ใช้ Lua 5.4 อยู่แล้ว
ต้องใส่ lua54 'yes' ไหม
ไม่ ปัจจุบัน Deprecated แล้ว
cerulean เปิด OneSync ไหม
ไม่
ถ้า Resource ต้อง OneSync ทำอย่างไร
ใช้ Requirement เช่น
dependency '/onesync'
และ Server ต้องเปิด OneSync เอง
cerulean เพิ่มจำนวน Player ไหม
ไม่
cerulean ช่วย FPS ไหม
ไม่ได้เป็น Performance Setting
cerulean ต่างจาก adamant อย่างไร
cerulean ใหม่กว่าและสืบทอด Features ก่อนหน้า พร้อมเพิ่ม Secure-context NUI Behavior
cerulean ต่างจาก bodacious อย่างไร
bodacious เป็น Version ก่อนหน้าเกี่ยวกับ C#/JS Compatibility ส่วน cerulean เพิ่ม Secure-context NUI และสืบทอด Behavior ก่อนหน้า
Resource ใหม่ควรใช้ adamant ไหม
โดยทั่วไปใช้ Current Version คือ cerulean
Resource ใหม่ควรใช้ bodacious ไหม
โดยทั่วไปไม่จำเป็น ใช้ cerulean
NUI Callback cerulean ใช้ http หรือ https
ใช้
https://
ทำไมต้อง https
เพราะ cerulean โหลด NUI ใน Secure Context
NUI Secure Context มีประโยชน์อะไร
ช่วยรองรับ Web APIs ที่ต้องการ Secure Context เช่น WASM และ fetch ตามที่ Cfx.re ระบุ
nui:// ยังควรใช้ไหม
เอกสาร NUI ปัจจุบันระบุว่า nui:// ไม่ถือเป็น Secure Context ใน Browser รุ่นใหม่ และแสดงรูปแบบ Secure Resource URL สำหรับ Resource Files แทน
Resource ไม่มี NUI ใช้ cerulean ได้ไหม
ได้ และควรใช้กับ Resource ใหม่ทั่วไป
JavaScript Resource ใช้ได้ไหม
ได้
C# Resource ใช้ได้ไหม
ได้
TypeScript ใช้ได้ไหม
ได้หลัง Compile เป็น JavaScript ที่ FiveM Runtime ใช้งานได้
__resource.lua กับ cerulean ใช่ของเดียวกันไหม
ไม่ __resource.lua เป็น Manifest Format รุ่นเก่า ส่วน Resource ใหม่ใช้ fxmanifest.lua และ fx_version
สรุป FiveM fx_version cerulean คืออะไร
fx_version 'cerulean' คือการบอก FiveM ว่า Resource ต้องใช้ Current FXv2 Manifest Feature Set ของ cerulean
รูปแบบมาตรฐานคือ
fx_version 'cerulean'
game 'gta5'
จุดสำคัญที่สุดของ cerulean ที่ Cfx.re ระบุคือ
NUI
↓
Secure Context
↓
WASM / fetch support
↓
NUI callbacks ใช้ https://
นอกจากนี้ cerulean ยังสืบทอด Features จาก Manifest Versions ก่อนหน้า ได้แก่ bodacious และ adamant ตามระบบ FXv2 Version Inheritance
แต่ต้องแยกให้ชัดว่า
cerulean
≠ Lua 5.4
cerulean
≠ OneSync
cerulean
≠ Game Build
cerulean
≠ Server Artifact
cerulean
≠ sv_maxclients
ถ้า Resource ต้อง OneSync ต้องระบุแยก
dependency '/onesync'
ถ้าต้องใช้ Server Build ขั้นต่ำก็ระบุแยก เช่น
dependency '/server:4500'
ส่วน Lua Resource ปัจจุบันไม่จำเป็นต้องใส่
lua54 'yes'
เพราะ Directive นี้ถูก Deprecated แล้ว
สำหรับผู้ที่เรียน FiveM Developer กับ comsiam วิธีจำง่ายที่สุดคือ cerulean เป็น Version ของกฎและความสามารถที่ fxmanifest.lua ใช้ ไม่ใช่ Version ของตัว Script หรือ Server
และหลักจาก comsiam คือ Resource ใหม่ควรเริ่มจาก Manifest ที่สะอาด
fx_version 'cerulean'
game 'gta5'
แล้วเพิ่มเฉพาะ Scripts, Dependencies, NUI และ Runtime Requirements ที่ Resource ใช้จริง ไม่ควร Copy Manifest รุ่นเก่ามาทั้งชุดโดยไม่รู้ว่ามี Directive ไหน Deprecated หรือมี Behavior ต่างจากปัจจุบัน
หัวข้อถัดไปคือ __resource.lua กับ fxmanifest.lua ต่างกันอย่างไร ซึ่งจะเปรียบเทียบ Manifest รุ่นเก่ากับรุ่นใหม่โดยตรง พร้อมวิธี Migration จาก __resource.lua ไปเป็น fxmanifest.lua แบบไม่ทำ Resource พัง
Comments
Post a Comment