วิธีเปิด OneSync FiveM ตั้งค่า server.cfg และตรวจว่าใช้งานได้จริง

 วิธีเปิด OneSync FiveM ตามเอกสาร Cfx.re ปัจจุบัน คือเพิ่ม set onesync on ในไฟล์ server.cfg แล้ว Restart FXServer เพื่อเปิด Server-side State Awareness และความสามารถของ OneSync เช่น Server-side Entity APIs, State Bags และ Routing Buckets

รูปแบบพื้นฐานคือ

set onesync on

ตัวอย่างร่วมกับจำนวนผู้เล่น

set onesync on
sv_maxclients 48

จากนั้น Restart Server แล้วตรวจว่า Configuration ถูกโหลดจริง

สำหรับ Resource ที่จำเป็นต้องใช้ OneSync ยังสามารถกำหนดใน fxmanifest.lua

dependencies {
    '/onesync'
}

ถ้า State Awareness ไม่พร้อม Resource จะไม่สามารถ Start ตาม Requirement นั้นได้

สิ่งสำคัญคือ ไม่ควรนำ Config OneSync จากบทความเก่าหลายปีก่อนมาผสมกับ Config ปัจจุบันโดยไม่ตรวจสอบ เพราะ OneSync มีการพัฒนามาหลายรุ่น และ ConVars/คำแนะนำเก่าบางรายการไม่จำเป็นแล้ว

① OneSync ต้องเปิดตรงไหน

เปิดใน

server.cfg

ของ FXServer

เพิ่ม

set onesync on

ไว้ใน Configuration ที่ Server โหลดจริง

ตัวอย่าง

endpoint_add_tcp "0.0.0.0:30120"
endpoint_add_udp "0.0.0.0:30120"

sv_hostname "My FiveM Server"

set onesync on

sv_maxclients 48

sv_licenseKey "YOUR_KEY"

จากนั้น Restart Server

② คำสั่งเปิด OneSync ปัจจุบันคืออะไร

เอกสาร Vanilla FXServer ปัจจุบันใช้

set onesync on

และระบุว่า OneSync จำเป็นสำหรับ

server-side state awareness

ดังนั้นถ้ากำลังตั้ง Server ใหม่ให้เริ่มด้วยรูปแบบนี้

ไม่จำเป็นต้องค้น Config เก่าแล้วเพิ่มคำสั่งจำนวนมากโดยไม่รู้หน้าที่

③ set หมายถึงอะไร

ใน

set onesync on

set ใช้กำหนด ConVar ฝั่ง Server

Concept คือ

ConVar
onesync
↓
Value
on

FXServer จะอ่านค่าจาก Configuration ตอนโหลด server.cfg

④ ทำไมต้องเปิด OneSync

เพราะ Features ขั้นสูงจำนวนมากเกี่ยวข้องกับ State Awareness เช่น

Server-side Entity State
State Bags
Routing Buckets
Networked Entities
Server-created Entities
Server Position Validation

ตัวอย่าง Server สามารถทำ

local ped =
    GetPlayerPed(source)

local coords =
    GetEntityCoords(ped)

เพื่อใช้ Player State ฝั่ง Server

⑤ เปิด OneSync แล้วได้อะไร

ภาพรวมคือ

OneSync
├── Server State Awareness
├── Entity Synchronization
├── Scope
├── Culling
├── Network Ownership
├── State Bags
├── Routing Buckets
└── Server-created Entities

จึงไม่ได้มีไว้เพิ่มจำนวน Slot อย่างเดียว

⑥ OneSync ต้องใช้กับ FiveM Server ใหม่ไหม

สำหรับ Server สมัยใหม่ โดยเฉพาะ Resource ที่ใช้

  • State Bags

  • Routing Bucket

  • Server Entity APIs

  • Instance

  • Server-created Vehicle/Ped/Object

ควรใช้ OneSync

Resource รุ่นใหม่จำนวนมากออกแบบโดยตั้งสมมติฐานว่า State Awareness มีอยู่

⑦ ตัวอย่าง server.cfg ที่แนะนำ

โครงสร้างพื้นฐาน

# Network
endpoint_add_tcp "0.0.0.0:30120"
endpoint_add_udp "0.0.0.0:30120"

# Server
sv_hostname "My FiveM Server"

# OneSync
set onesync on

# Slots
sv_maxclients 48

# License
sv_licenseKey "YOUR_LICENSE_KEY"

# Resources
ensure mapmanager
ensure chat
ensure spawnmanager

ensure my_resource

ตัวอย่างนี้เป็นเพียงโครงสร้างเพื่ออธิบาย OneSync

Server จริงยังมี Configuration อื่นตาม Framework และ Resources ที่ใช้

⑧ ต้องวาง set onesync on บรรทัดไหน

ไม่จำเป็นต้องอยู่บรรทัดแรก

แต่ควรวางในตำแหน่งที่อ่านง่าย เช่นกลุ่ม

OneSync / Networking

และที่สำคัญคืออย่าให้ภายหลังมี Config อื่น Override ค่า

เช่น

set onesync on

# ...

set onesync off

ถ้ามีหลาย Config Files ต้องตรวจลำดับการ Execute ด้วย

⑨ ต้อง Restart Server หลังแก้ไหม

แนะนำให้ Restart FXServer หลังเปลี่ยน Configuration สำคัญอย่าง OneSync เพื่อให้เริ่ม Server ด้วยค่าที่ต้องการอย่างชัดเจน

อย่าสับสนกับ

restart myresource

เพราะนั่น Restart เฉพาะ Resource

สำหรับ Server Configuration หลัก การ Restart Server ช่วยลดความสับสนเรื่อง Runtime State

⑩ sv_maxclients คืออะไร

sv_maxclients กำหนดจำนวน Player Slots สูงสุด

ตัวอย่าง

sv_maxclients 48

หมายถึง Server ตั้ง Capacity สูงสุดไว้ 48 Players

OneSync และ Slot Limit เป็นเรื่องที่สัมพันธ์กันแต่ไม่ใช่คำสั่งเดียวกัน

onesync
→ Networking/State Awareness

sv_maxclients
→ Player Slot Limit

⑪ เปิด OneSync แล้วต้องตั้ง 48 คนไหม

ไม่จำเป็น

สามารถตั้งตาม Requirement และสิทธิ์ Server ของคุณ

เช่น

set onesync on
sv_maxclients 32

ก็ได้

OneSync ยังมีประโยชน์ด้าน Development Features แม้ Server ไม่ได้ใช้ 48 Players เต็ม

⑫ มากกว่า 48 Players ทำอย่างไร

ตามเอกสาร Cfx.re ปัจจุบัน OneSync ใช้งานได้ฟรีถึง 48 Slots

หากต้องการเกิน 48 Players ต้องมี Entitlement/Element Club Tier ที่รองรับ โดยปัจจุบันเอกสารระบุเริ่มจาก

FiveM Element Club Argentum

หรือ Tier ที่สูงกว่า

ดังนั้นแค่เขียน

sv_maxclients 128

ไม่ได้แปลว่าสิทธิ์ Server จะรองรับ 128 Slots อัตโนมัติ

⑬ ตัวอย่าง Server 64 Slots

เมื่อ Account/Server Key มีสิทธิ์รองรับ

set onesync on
sv_maxclients 64

จากนั้น Restart Server

หาก Entitlement ไม่รองรับ จำนวน Slot ที่ตั้งไว้จะไม่ทำให้ข้อจำกัดของ Platform หายไป

⑭ ต้องใช้ Latest Server Artifact ไหม

ควรใช้ FXServer Artifact รุ่นปัจจุบันที่เหมาะสม

Cfx.re แนะนำให้ใช้ Latest Server Artifact เมื่อแก้ปัญหาเกี่ยวกับจำนวน Slots สูงกว่า 48 และ Server Features ปัจจุบัน

Resource รุ่นใหม่ก็อาจพึ่ง Server Natives หรือ Features ที่ Artifact เก่าไม่มี

⑮ Artifact คืออะไร

FXServer Artifact คือ Build ของ Server Runtime

Concept

Cfx.re
↓
Server Artifact
↓
FXServer
↓
Resources

Artifact เก่ามากอาจขาด

  • Bug Fixes

  • OneSync Changes

  • New Natives

  • Security Fixes

  • Resource Runtime Features

ดังนั้นก่อน Debug OneSync แปลก ๆ ควรตรวจ Server Build ด้วย

⑯ OneSync Legacy คืออะไร

ในอดีตมี Config และ Modes ที่เกี่ยวข้องกับ OneSync หลายรูปแบบ เช่นคำว่า

legacy

ซึ่งยังพบได้ในบทความหรือ Server Config เก่า

แต่ถ้ากำลังสร้าง Server ปัจจุบันควรเริ่มจากเอกสาร Cfx.re ล่าสุดที่ใช้

set onesync on

แทนการ Copy Config เก่ามาปะติดปะต่อ

⑰ ต้องเขียน onesync legacy ไหม

สำหรับ Server ใหม่ที่ต้องใช้ OneSync Features ปัจจุบัน ไม่ควรเลือก Legacy เพียงเพราะเจอจาก Tutorial เก่า

โดยเฉพาะ Routing Buckets และ State Awareness Modern Architecture ควรใช้ OneSync ที่เปิดตาม Config ปัจจุบัน

หลักคือ

Official current docs
>
old tutorials

⑱ ต้องเขียน onesync infinity ไหม

สำหรับ Configuration ปัจจุบัน เอกสาร Vanilla FXServer ใช้

set onesync on

ดังนั้นอย่าเพิ่มคำสั่ง Mode เก่าหรือรูปแบบจาก Tutorial รุ่นเก่าเพียงเพราะต้องการคำว่า Infinity

ให้ใช้ Artifact และ Configuration ปัจจุบันเป็นหลัก

⑲ Infinity หายไปไหน

OneSync Architecture ปัจจุบันรวมแนวคิดที่เคยเรียกว่า OneSync Infinity เช่น

  • Player Culling

  • Entity Culling

  • Extended Object IDs

  • Focus Zones

แต่ Configuration Server ใหม่ควรยึดคำแนะนำปัจจุบัน

set onesync on

แทนการตั้งค่าจากความทรงจำของ Server Builds เก่า

⑳ อย่าเปิด ConVar เก่าจำนวนมากโดยไม่รู้หน้าที่

บน Internet ยังมี Config อย่าง

onesync_distanceCullVehicles
onesync_forceMigration

จากบทความเก่า

Cfx.re มี Archive ที่ระบุชัดว่าข้อมูลบางชุดเป็น Ancient Info และบาง Setting ถูกเปิดเป็น Default มานานแล้ว

ดังนั้นอย่าทำ

หา "best onesync config"
↓
Copy 20 ConVars
↓
วาง server.cfg

โดยไม่ตรวจ Documentation ปัจจุบัน

㉑ วิธีที่ดีกว่าคืออะไร

เริ่มจาก Minimal Configuration

set onesync on
sv_maxclients 48

จากนั้นเพิ่มเฉพาะ Setting ที่

  1. มีใน Documentation ปัจจุบัน

  2. เข้าใจว่าทำอะไร

  3. มีปัญหาหรือ Requirement ที่ต้องแก้จริง

ช่วยลด Config ที่ขัดกัน

㉒ วิธีตรวจ OneSync ด้วย Resource

วิธีหนึ่งที่ชัดมากคือให้ Resource ระบุ Requirement

ใน fxmanifest.lua

fx_version 'cerulean'
game 'gta5'

dependencies {
    '/onesync'
}

server_script 'server.lua'

/onesync เป็น Runtime Constraint ที่หมายถึง Resource ต้องการ State Awareness ไม่ถูก Disable

㉓ /onesync สำคัญอย่างไร

สมมติ Resource ใช้

GetPlayerPed(source)

Routing Buckets หรือ State Bags อย่างจริงจัง

การกำหนด

dependency '/onesync'

ช่วยให้ Requirement ถูกประกาศไว้ใน Resource

แทนที่จะให้ Resource Start แล้ว Error ในภายหลังแบบหาสาเหตุยาก

㉔ dependency กับ dependencies ต่างกันอย่างไร

Resource Manifest รองรับการระบุ Dependency

แบบเดี่ยว เช่น

dependency '/onesync'

หรือหลายรายการ

dependencies {
    '/onesync',
    '/server:4500'
}

เลือกตาม Requirement

ถ้ามีหลาย Constraint แบบ Table อ่านง่ายกว่า

㉕ /server:4500 คืออะไร

Runtime Constraint สามารถกำหนด Minimum Server Build ได้

เช่น

dependencies {
    '/server:4500',
    '/onesync'
}

หมายถึง Resource ต้องการ

Server build >= 4500
+
OneSync State Awareness

ใช้เมื่อ Resource ต้องพึ่ง Native/Feature ที่มีใน Server Build ระดับหนึ่งขึ้นไป

㉖ ตรวจ OneSync ด้วย Server Script ได้ไหม

ได้ในเชิง Debug

ตัวอย่าง Server-only

CreateThread(function()

    local value =
        GetConvar(
            'onesync',
            'off'
        )

    print(
        'OneSync convar:',
        value
    )

end)

GetConvar() ใช้อ่าน Standard ConVar ฝั่ง Server

ช่วยตรวจว่าค่า Configuration ที่ Runtime เห็นเป็นอะไร

㉗ ทำ Command ตรวจ OneSync

server.lua

RegisterCommand(
    'checkonesync',
    function(source)

        local oneSync =
            GetConvar(
                'onesync',
                'off'
            )

        local maxClients =
            GetConvarInt(
                'sv_maxclients',
                0
            )

        print(
            'OneSync:',
            oneSync
        )

        print(
            'Max Clients:',
            maxClients
        )

    end,
    true
)

ใช้ตรวจ Server-side Configuration

ควรจำกัด Permission Command หากใช้ Production

㉘ ทำไมใช้ GetConvar ฝั่ง Client ไม่ได้

Standard Server ConVars อ่านจาก Server-side Scripts

หากต้องการค่าที่ Client อ่านได้ต้องใช้ Server-replicated ConVar เช่น setr

แต่ไม่มีเหตุผลต้อง Replicate OneSync Config ไป Client เพียงเพื่อ Debug ทั่วไป

ตรวจ Server-side ตรงที่สุด

㉙ ตรวจ Server-side Player Ped

อีกวิธีหนึ่งคือทดสอบ Feature ของ State Awareness

RegisterCommand(
    'mypedserver',
    function(source)

        if source <= 0 then
            return
        end

        local ped =
            GetPlayerPed(source)

        print(
            'Ped:',
            ped
        )

    end,
    false
)

ถ้า Environment รองรับและ Player อยู่ในเกม Server สามารถเข้าถึง Player Ped State ได้ตาม OneSync APIs

㉚ ตรวจ Coordinates ฝั่ง Server

ตัวอย่าง

RegisterCommand(
    'mycoordsserver',
    function(source)

        if source <= 0 then
            return
        end

        local ped =
            GetPlayerPed(source)

        if ped == 0 then
            return
        end

        local coords =
            GetEntityCoords(ped)

        print(
            ('%.2f %.2f %.2f')
            :format(
                coords.x,
                coords.y,
                coords.z
            )
        )

    end,
    false
)

นี่เป็นตัวอย่างที่ช่วยเห็น Server-side State Awareness จริง

㉛ ทดสอบ State Bag

Server สามารถกำหนด Player State

RegisterCommand(
    'teststate',
    function(source)

        if source <= 0 then
            return
        end

        Player(source).state:set(
            'onesync:test',
            true,
            true
        )

    end,
    false
)

Client สามารถอ่าน State ตาม Replication

เป็นอีกวิธีทดสอบ OneSync Feature ใน Resource Development

㉜ ทดสอบ Routing Bucket

Server

RegisterCommand(
    'testbucket',
    function(source)

        if source <= 0 then
            return
        end

        SetPlayerRoutingBucket(
            source,
            100
        )

        print(
            GetPlayerRoutingBucket(
                source
            )
        )

    end,
    true
)

ถ้า OneSync Environment พร้อม Routing Bucket APIs จะทำงานตามระบบ

อย่าลืมย้าย Playerกลับ Bucket 0 หลัง Debug

㉝ Command กลับ Bucket 0

RegisterCommand(
    'mainworld',
    function(source)

        if source <= 0 then
            return
        end

        SetPlayerRoutingBucket(
            source,
            0
        )

    end,
    true
)

ช่วยไม่ให้ Account ทดสอบติดอยู่ใน Debug Bucket

㉞ ทดสอบ Server-created Vehicle

อีก Feature ที่ใช้ตรวจได้คือ Server-created Entity

RegisterCommand(
    'testservercar',
    function(source)

        if source <= 0 then
            return
        end

        local ped =
            GetPlayerPed(source)

        if ped == 0 then
            return
        end

        local coords =
            GetEntityCoords(ped)

        local vehicle =
            CreateVehicleServerSetter(
                joaat('blista'),
                'automobile',
                coords.x + 5.0,
                coords.y,
                coords.z,
                0.0
            )

        if vehicle == 0 then
            print(
                'Vehicle creation failed'
            )

            return
        end

        SetEntityOrphanMode(
            vehicle,
            2
        )
    end,
    true
)

ใช้เป็น Development Test ได้

㉟ ต้องใช้ CreateVehicleServerSetter เสมอไหม

ไม่

เป็นหนึ่งใน Server-side Entity Creation APIs

แต่ Cfx.re แนะนำ Server-created Entities เป็น Best Practice สำหรับ OneSync หลาย Use Cases

Resource แต่ละตัวอาจมี Architecture ต่างกัน

สิ่งสำคัญคือเข้าใจว่า Server มี Entity Capabilities มากกว่าระบบเก่า

㊱ เปิด OneSync แล้ว State Bags ทำงานทันทีไหม

State Bags เป็นส่วนหนึ่งของ State Awareness Architecture

แต่ Resource ต้องเขียน State Bag Logic ให้ถูก

เช่น

Entity(entity).state:set(
    'fuel',
    75,
    true
)

การเปิด OneSyncไม่ได้สร้าง fuel State ให้รถทุกคันโดยอัตโนมัติ

Developer ยังต้องกำหนด Custom State เอง

㊲ เปิด OneSync แล้ว Routing Bucket ทำงานอัตโนมัติไหม

Feature พร้อมให้ Resource ใช้

แต่ Player ทุกคนไม่ได้ถูกแบ่ง Instance ให้อัตโนมัติ

Default Gameplay มักอยู่

Bucket 0

Resource ต้องเรียก

SetPlayerRoutingBucket(...)

และ

SetEntityRoutingBucket(...)

เองเมื่อสร้าง Instance

㊳ เปิด OneSync แล้ว Server ปลอดภัยขึ้นอัตโนมัติไหม

ไม่

OneSync ทำให้ Server มี State Awareness และ Security Tools มากขึ้น

แต่ Network Event แบบ

RegisterNetEvent(
    'money:add',
    function(amount)

        AddMoney(
            source,
            amount
        )

    end
)

ก็ยังมีปัญหาเหมือนเดิม

Server ต้อง Validate Client Input

㊴ OneSync ช่วย Security ตรงไหน

ตัวอย่างสำคัญคือ Server สามารถตรวจ Gameplay State เองได้มากขึ้น

เช่น

Client:
ฉันส่งงานแล้ว

Server:
↓
GetPlayerPed(source)
↓
GetEntityCoords()
↓
อยู่จุดส่งงานจริงไหม?
↓
Mission State ถูกไหม?
↓
Reward

ช่วยลดการเชื่อ Client

㊵ เปิด OneSync แล้วต้องแก้ Script เก่าหรือไม่

ขึ้นกับ Script

Resource เก่าบางตัวอาจมีสมมติฐาน เช่น

Client เห็น Player ทุกคน
Entity Owner ไม่เปลี่ยน
Entity Handle อยู่ตลอด
Client Spawn Entity ได้เสมอ

ซึ่งไม่เหมาะกับ OneSync Architecture ปัจจุบัน

ต้องทดสอบทีละ Resource

㊶ Script ที่ใช้ GetActivePlayers มีปัญหาไหม

ไม่เสมอ

ถ้าต้องการ Nearby/Scoped Players

GetActivePlayers()

ยังเหมาะ

แต่ถ้าต้องการ

ผู้เล่นทุกคนใน Server

ต้องทำ Server-side

OneSync Infinity ใช้ Player Culling ทำให้ Players นอก Focus Zone ไม่จำเป็นต้องมี Local Representation บน Client

㊷ Scoreboard ควรแก้หรือไม่

ถ้า Scoreboard สร้าง Player List จาก Client Scope อย่างเดียว ควรปรับ

Architecture ที่เหมาะกว่า

Client เปิด Scoreboard
↓
Server
↓
GetPlayers()
↓
สร้างข้อมูลที่อนุญาต
↓
ส่ง Client
↓
NUI

รองรับ OneSync Server ขนาดใหญ่ดีกว่า

㊸ Entity Handle เก่าต้องระวังไหม

ต้อง

Entity อาจ

  • ออกจาก Scope

  • ถูก Recreated

  • ถูก Delete

  • Ownership Migration

ก่อนใช้ Handle ระยะยาวควรตรวจ

DoesEntityExist(
    entity
)

และหากอ้างข้าม Network ให้ใช้ Network ID ตามเหมาะสม

㊹ เปิด OneSync แล้ว Network ID เปลี่ยนไหม

Network IDs เป็นส่วนหนึ่งของ Network Entity System

Network ID ใช้อ้าง Entity ในช่วง Lifetime ของ Entity

แต่ไม่ได้เป็น Persistent Database ID

การเปิด OneSync ไม่ได้เปลี่ยนหลักนี้

㊺ OneSync Population เปิดอย่างไร

มี ConVar

onesync_population

สำหรับ Population Management

เอกสาร Console Commands ปัจจุบันระบุ Default เป็น

true

โดยทั่วไปไม่จำเป็นต้องเปลี่ยนถ้าไม่มี Requirement

สำหรับ Routing Bucket เฉพาะ Instance สามารถควบคุม Population เป็นราย Bucket ได้

㊻ ปิด Population ทั้ง Server ดีไหม

ไม่จำเป็น เว้นแต่ Gameplay ต้องการจริง

ถ้าต้องการปิดเฉพาะ Private Instance

ใช้

SetRoutingBucketPopulationEnabled(
    bucket,
    false
)

จะเฉพาะเจาะจงกว่า

อย่าเปลี่ยน Global Population เพียงเพื่อแก้ Mission เดียว

㊼ ต้องเพิ่ม OneSync Config ทุก Resource ไหม

ไม่

set onesync on อยู่ระดับ FXServer

ไม่ต้องใส่ในทุก Resource

แต่ Resource ที่มี Dependency ชัดเจนสามารถประกาศ

dependency '/onesync'

ใน Manifest

เพื่อบอก Requirement

㊽ fxmanifest ตัวอย่างสำหรับ OneSync Resource

fx_version 'cerulean'
game 'gta5'

dependency '/onesync'

shared_script 'config.lua'

client_script 'client.lua'

server_script 'server.lua'

ถ้าต้องมี Requirements เพิ่ม

dependencies {
    '/onesync',
    '/server:4500'
}

ได้ตาม Resource

㊾ /onesync เปิด OneSync ให้ Server ไหม

ไม่

นี่เป็นจุดที่ควรจำ

dependency '/onesync'

ไม่ได้ทำหน้าที่เปิด OneSync

มันเพียงประกาศว่า

Resource นี้ต้องการ State Awareness

การเปิด Server ยังต้องอยู่ที่ Configuration

set onesync on

㊿ OneSync เปิดใน txAdmin อย่างไร

ถ้าใช้ txAdmin Recipe/Server Data ตัว Configuration หลักสุดท้ายยังถูกส่งให้ FXServerผ่าน Server Configuration

ให้ตรวจไฟล์ server.cfg ที่ Instance นั้นโหลดจริงว่ามี

set onesync on

ไม่ควรแก้ server.cfg คนละตัวกับไฟล์ที่ FXServer กำลัง Execute

51 ทำไมแก้ server.cfg แล้วไม่เกิดผล

สาเหตุที่ควรตรวจ เช่น

แก้ผิดไฟล์
FXServer โหลด Config คนละชุด
ไม่ได้ Restart Server
มี Config อื่น Override
Syntax ผิด
Artifact เก่า

โดยเฉพาะ txAdmin Server ที่อาจมี Data Directory/Recipe ของ Instance แยกกัน

52 ตรวจว่า server.cfg ถูก Execute หรือไม่

สามารถเพิ่ม Debug ConVar ชั่วคราว

set com_test_config "loaded"

Server-side Resource

print(
    GetConvar(
        'com_test_config',
        'missing'
    )
)

ถ้าได้

loaded

แสดงว่า Config ชุดนั้นถูกอ่าน

หลัง Debug สามารถลบออก

53 OneSync ไม่เปิดเพราะ License Key ไหม

OneSync ถึง 48 Slots ใช้งานได้ตามสิทธิ์ปัจจุบัน แต่ Server เองยังต้องมี Cfx.re Server License Key ที่ Valid ตามการตั้งค่า FXServer

ถ้า Server Start ไม่สำเร็จเพราะ License/Configuration Error ต้องแก้ Server Startup ก่อน

อย่าโฟกัส OneSync อย่างเดียว

54 Server เปิดไม่ขึ้นหลังเพิ่ม OneSync ทำอย่างไร

ตรวจ Server Console ก่อน

ดู

  • Syntax

  • Artifact

  • License

  • Config Path

  • Resources

  • Startup Arguments

Configuration พื้นฐาน

set onesync on

เรียบง่ายมาก

ถ้า Server พังหลังเพิ่ม Config จำนวนมาก ควรลดกลับเหลือ Minimal Configuration แล้ว Debug ทีละส่วน

55 Resource ขึ้นว่าต้องการ OneSync

ถ้า Manifest มี

dependency '/onesync'

แต่ State Awareness Disabled Resource สามารถไม่ Start เพราะ Requirement ไม่ผ่าน

ตรวจ

set onesync on

จากนั้น Restart Server และดู Console ใหม่

นี่เป็น Feature ที่ช่วยให้ Error ชัดเจนกว่าปล่อย Resource ทำงานแบบไม่ครบ Requirement

56 เปิด OneSync แล้ว Player เข้าไม่ได้ เกี่ยวไหม

อาจเกี่ยวหรือไม่เกี่ยวก็ได้

อย่าตัดสินจากการเปลี่ยนล่าสุดเพียงอย่างเดียว

ตรวจ

Server Console
Client F8
Artifact
License
Endpoints
Firewall
Resources
Database
Network

แยกปัญหาออกเป็น Layer

OneSync ไม่ใช่สาเหตุของ Connection Error ทุกประเภท

57 เปิด OneSync แล้ว Resmon สูงขึ้นไหม

ไม่ควรสรุปว่า OneSync เป็นสาเหตุทันที

Resmon สูงมักต้องดู Resource CPU/Time โดยตรง

Script ที่

Loop ทุก Frame
Loop Players
Loop Entities
Send NUI ซ้ำ
Trigger Events ซ้ำ

สามารถกิน CPU ไม่ว่า OneSync จะเปิดหรือไม่

OneSync ไม่ Optimize Resource ที่เขียนไม่ดีให้อัตโนมัติ

58 Configuration ที่ควรหลีกเลี่ยง

อย่าทำ Server Config แบบ

Copy จาก YouTube ปี 2019
+
Copy จาก Forum ปี 2020
+
Copy จาก Discord
+
Copy Random ConVars

แล้วไม่รู้ว่าแต่ละบรรทัดทำอะไร

สำหรับ OneSync เริ่มจาก

set onesync on

แล้วเพิ่มเฉพาะ Setting ที่ Documentation ปัจจุบันรองรับและ Server ต้องใช้จริง

59 Checklist เปิด OneSync FiveM

ตรวจทีละข้อ

① ใช้ FXServer Artifact ปัจจุบันหรือไม่?
② แก้ server.cfg ตัวที่ Server โหลดจริงหรือไม่?
③ มี `set onesync on` หรือไม่?
④ มี Config อื่น Override หรือไม่?
⑤ Restart FXServer แล้วหรือไม่?
⑥ `sv_maxclients` ถูกต้องหรือไม่?
⑦ ถ้าเกิน 48 Slots มี Entitlement ที่รองรับหรือไม่?
⑧ Resource ต้อง OneSync มี `/onesync` Constraint หรือไม่?
⑨ Server Console มี Error หรือไม่?
⑩ GetConvar เห็น OneSync Config หรือไม่?
⑪ Server-side Player Ped ทำงานหรือไม่?
⑫ Server-side Coordinates ทำงานหรือไม่?
⑬ State Bags ใช้งานได้หรือไม่?
⑭ Routing Bucket ใช้งานได้หรือไม่?
⑮ Script เก่าพึ่ง Global Client Player List หรือไม่?
⑯ Script พึ่ง Client-created Entity หรือไม่?
⑰ Script เข้าใจ Ownership Migration หรือไม่?
⑱ Config มี OneSync Legacy Commands เก่าหรือไม่?
⑲ Config มี Experimental ConVars เก่าที่ไม่จำเป็นหรือไม่?
⑳ Backup server.cfg ก่อนแก้หรือยัง?

⑥⓪ ตัวอย่างการตั้งค่า OneSync พร้อม Resource Test

server.cfg

# Network
endpoint_add_tcp "0.0.0.0:30120"
endpoint_add_udp "0.0.0.0:30120"

# Server
sv_hostname "FiveM OneSync Server"

# OneSync
set onesync on

# Player slots
sv_maxclients 48

# Resource
ensure onesync_test

# License
sv_licenseKey "YOUR_LICENSE_KEY"

onesync_test/fxmanifest.lua

fx_version 'cerulean'
game 'gta5'

dependency '/onesync'

server_script 'server.lua'

onesync_test/server.lua

RegisterCommand(
    'onesynctest',
    function(source)

        local oneSync =
            GetConvar(
                'onesync',
                'off'
            )

        local maxClients =
            GetConvarInt(
                'sv_maxclients',
                0
            )

        print(
            'OneSync:',
            oneSync
        )

        print(
            'Max Clients:',
            maxClients
        )

        if source <= 0 then
            return
        end

        local ped =
            GetPlayerPed(source)

        if ped == 0 then
            print(
                'Player ped not found'
            )

            return
        end

        local coords =
            GetEntityCoords(ped)

        local bucket =
            GetPlayerRoutingBucket(
                source
            )

        print(
            'Player:',
            source
        )

        print(
            'Ped:',
            ped
        )

        print(
            'Coords:',
            coords
        )

        print(
            'Bucket:',
            bucket
        )
    end,
    true
)

ถ้า Resource Start ผ่าน /onesync Requirement และ Server-side State Tests ทำงานได้ตามคาด ก็เป็นสัญญาณที่ชัดเจนว่า Environment พร้อมสำหรับ Resource ที่พึ่ง OneSync

ตัวอย่าง Config ที่ควรเริ่มต้น

สำหรับ Server ใหม่ไม่ต้องทำให้ซับซ้อน

set onesync on
sv_maxclients 48

จากนั้นค่อยเพิ่ม Configuration ด้าน

  • Security

  • Voice

  • Framework

  • Database

  • Entity Lockdown

  • Game Build

  • Resources

แยกตาม Requirement

คำถามที่พบบ่อยเกี่ยวกับการเปิด OneSync FiveM

วิธีเปิด OneSync FiveM ทำอย่างไร

เพิ่มใน server.cfg

set onesync on

แล้ว Restart FXServer

ต้องเขียน set onesync infinity ไหม

สำหรับการตั้งค่า Server ปัจจุบัน เอกสาร Vanilla FXServer ใช้ set onesync on

ต้องเปิด OneSync Legacy ไหม

ไม่ควรใช้ Config เก่าโดยไม่มีเหตุผล สำหรับ Server ใหม่ให้ยึด Documentation ปัจจุบัน

OneSync ฟรีไหม

เอกสาร Cfx.re ปัจจุบันระบุ OneSync ฟรีถึง 48 Slots

ต้องการ 64 Players ทำอย่างไร

ตั้ง sv_maxclients 64 และต้องมี Element Club/Entitlement ที่รองรับมากกว่า 48 Slots

OneSync กับ sv_maxclients เหมือนกันไหม

ไม่ OneSync เป็น Synchronization/State Awareness ส่วน sv_maxclients เป็น Player Capacity

32 Players เปิด OneSync ได้ไหม

ได้

ต้องใช้ 48 Players ถึงได้ประโยชน์จาก OneSync ไหม

ไม่ Server ขนาดเล็กก็ใช้ State Bags, Routing Buckets และ Server-side State Awareness ได้

/onesync ใน fxmanifest คืออะไร

เป็น Runtime Constraint ที่ระบุว่า Resource ต้องการ State Awareness

/onesync เปิด OneSync ไหม

ไม่ ต้องเปิดใน server.cfg ด้วย set onesync on

ตรวจ OneSync ใน Script ได้ไหม

สามารถอ่าน ConVar ฝั่ง Serverด้วย GetConvar() เพื่อช่วย Debug Configuration

ตรวจด้วย Routing Bucket ได้ไหม

ได้ Resource ที่พึ่ง OneSync สามารถทดสอบ Server-side Routing Bucket APIs ตาม Environment

ตรวจ Server Coordinates ได้ไหม

ได้ผ่าน Player Ped และ Entity APIs ที่รองรับเมื่อ State Awareness พร้อม

ต้อง Restart Resource หรือ Server

หลังเปลี่ยน OneSync Configuration แนะนำ Restart FXServer ให้ Environment เริ่มด้วย Config ใหม่อย่างชัดเจน

OneSync เปิดแล้วทำให้ Server รองรับ 2,048 Players ทันทีไหม

ไม่ Slot Entitlement, Hardware, Network, Resources และ Architecture ยังเป็นข้อจำกัด

OneSync เปิดแล้ว Server เร็วขึ้นไหม

ไม่รับประกัน OneSync ช่วย Synchronization Architecture แต่ Script Performance ยังขึ้นกับ Resource

OneSync เปิดแล้วป้องกัน Cheat ไหม

ไม่ Network Events และ Business Logic ยังต้อง Validate Server-side

OneSync ต้องใช้กับ Routing Bucket ไหม

Routing Buckets เป็น OneSync Feature และ Resource ที่ใช้ควรเปิด OneSync

OneSync ต้องใช้กับ State Bags ไหม

State Bags เป็นส่วนหนึ่งของ State Awareness Architecture

OneSync ต้องใช้กับ Server-created Vehicle ไหม

Server-side Networked Entity Architecture หลายส่วนสัมพันธ์กับ OneSync

Config เก่าบน Internet ใช้ได้ไหม

บางส่วนอาจเก่าหรือไม่จำเป็นแล้ว ควรเทียบกับ Documentation Cfx.re ปัจจุบันก่อนทุกครั้ง

สรุปวิธีเปิด OneSync FiveM

การเปิด OneSync FiveM ใน Server ปัจจุบันเริ่มจากบรรทัดเดียวใน server.cfg

set onesync on

จากนั้นกำหนด Player Slots

sv_maxclients 48

และ Restart FXServer

ถ้า Resource ต้องการ OneSync โดยตรง สามารถประกาศใน fxmanifest.lua

dependency '/onesync'

หรือ

dependencies {
    '/onesync'
}

เพื่อบังคับว่า State Awareness ต้องเปิดก่อน Resource ทำงาน

หลังเปิดแล้วควรทดสอบ

OneSync ConVar
↓
Server-side Player Ped
↓
Server-side Coordinates
↓
State Bags
↓
Routing Buckets
↓
Server-created Entities

ตาม Feature ที่ Resource ของคุณใช้งานจริง

ถ้าต้องการเกิน 48 Slots ต้องแยกอีกเรื่องหนึ่งคือ Player Slot Entitlement โดย Documentation ปัจจุบันระบุว่ามากกว่า 48 Slots ต้องใช้ Tier ที่รองรับ เริ่มจาก FiveM Element Club Argentum หรือสูงกว่า

สิ่งที่ควรระวังมากที่สุดคือ Tutorial เก่า

อย่านำ Config อย่าง

OneSync Legacy
Old experimental convars
Random performance tweaks

มารวมกันโดยคิดว่ายิ่งมีบรรทัดมาก Server ยิ่งดี

สำหรับคนที่เรียน FiveM Developer กับ comsiam การตั้งค่า OneSync ที่ดีควรเริ่มจาก Configuration มาตรฐานที่สั้นและตรวจสอบได้ แล้วจึงเพิ่ม Setting ตาม Requirement จริงของ Resource

หลักจาก comsiam คือ เปิด OneSync ด้วย Config ปัจจุบันก่อน แล้วพิสูจน์ว่า Feature ที่ต้องใช้ทำงานจริง อย่าแก้ Networking ด้วยการ Copy ConVars เก่าจำนวนมากโดยไม่รู้ว่ามันทำอะไร

เมื่อ OneSync เปิดและทำงานเรียบร้อยแล้ว ขั้นต่อไปคือหัวข้อ FiveM Server-side Entity คืออะไร ซึ่งจะลงรายละเอียดว่า Server สามารถสร้าง อ่าน ตรวจสอบ และจัดการ Ped, Vehicle และ Object ได้อย่างไรภายใต้ OneSync

Comments

Popular posts from this blog

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

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

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