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ช่วงเปิดตัวจุดสำคัญ
adamant2019-12ต้องระบุ game, FXv2 รุ่นพื้นฐาน
bodacious2020-02C#/JS compatibility changes
cerulean2020-05Secure-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

Popular posts from this blog

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

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

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