วิธีเปิด 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 ที่
มีใน Documentation ปัจจุบัน
เข้าใจว่าทำอะไร
มีปัญหาหรือ 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
Post a Comment