FiveM Dependency คืออะไร ทำไม Script ถึงต้องใช้

FiveM Dependency คือ Resource หรือ Requirement ที่ Script หนึ่งต้องพึ่งพาเพื่อให้ทำงานได้อย่างถูกต้อง เช่น Script ร้านค้าอาจต้องใช้ Framework, Inventory, ox_lib และ oxmysql ร่วมกัน หากขาดตัวใดตัวหนึ่ง Script อาจไม่ Start หรือ Start ได้แต่บางระบบใช้งานไม่ได้

ตัวอย่างง่าย ๆ

my-script
↓
ต้องใช้
ox_lib
↓
ถ้าไม่มี ox_lib
my-script อาจทำงานไม่ได้

FiveM สามารถกำหนด Dependency อย่างเป็นทางการผ่านไฟล์ fxmanifest.lua เช่น

dependency 'ox_lib'

หรือหากต้องใช้หลาย Resource

dependencies {
    'ox_lib',
    'oxmysql'
}

นอกจากนี้ Dependency ของ FiveM ไม่ได้หมายถึง Resource อย่างเดียว เพราะ Resource Manifest ยังสามารถกำหนด Requirement เช่น Server Build, OneSync, Game Build หรือ Native ได้ด้วย

ดังนั้นถ้ากำลังติดตั้ง Script FiveM แล้วเจอคำว่า dependency, dependencies, requires หรือ requirements สิ่งเหล่านี้คือข้อมูลที่ไม่ควรมองข้าม

① Dependency คืออะไรแบบเข้าใจง่าย

ลองคิดว่า Script FiveM เป็นบ้านหนึ่งหลัง

บ้านอาจต้องใช้

ไฟฟ้า
น้ำ
โครงสร้าง
ประตู
ระบบรักษาความปลอดภัย

จึงจะใช้งานได้ครบ

Script FiveM ก็คล้ายกัน

ตัวอย่าง

Police Script
↓
Framework
↓
Inventory
↓
Target
↓
Database
↓
Dispatch

ถ้า Police Script ถูกออกแบบให้ใช้ ox_target แต่ Server ไม่มี ox_target ระบบ Interaction บางส่วนอาจไม่แสดง

หรือ Script ต้องใช้ oxmysql เพื่ออ่านข้อมูลผู้เล่นจาก Database แต่ Database Connector ไม่ทำงาน ระบบที่ต้อง Query ข้อมูลก็อาจ Error

Dependency จึงเป็น ส่วนประกอบที่ Script อื่นต้องใช้เพื่อทำงานต่อ

② ทำไม Script FiveM ถึงต้องมี Dependency

ถ้าผู้พัฒนาต้องเขียนทุกระบบใหม่ทั้งหมดในทุก Script จะเสียเวลาและเกิด Code ซ้ำจำนวนมาก

ตัวอย่างเช่น Script 50 ตัวต้องการ Menu

แทนที่ Developer ทุกคนจะสร้าง Menu System ใหม่ทั้งหมด สามารถใช้ Library กลางได้

เช่นแนวคิด

ox_lib
↓
Menu
Callback
Context
Dialog
Notification
Utility
↓
Script หลายตัวเรียกใช้

หรือ Script จำนวนมากต้องเข้าถึง Database

แทนที่จะสร้าง Database Connector ใหม่ทุก Script ก็สามารถใช้

oxmysql

ร่วมกันได้

ข้อดีคือ

  • ลด Code ซ้ำ

  • พัฒนาเร็วขึ้น

  • ใช้มาตรฐานร่วมกัน

  • Update ระบบกลางได้ง่าย

  • Script เชื่อมต่อกันได้สะดวก

  • ลดความซับซ้อนของแต่ละ Resource

นี่คือเหตุผลที่ FiveM ecosystem มี Library, Framework และ Core Resources จำนวนมาก

③ dependency ใน fxmanifest.lua คืออะไร

FiveM รองรับ Directive

dependency 'resource_name'

ใน fxmanifest.lua

ตัวอย่าง

fx_version 'cerulean'
game 'gta5'

dependency 'ox_lib'

client_script 'client.lua'
server_script 'server.lua'

ความหมายคือ Resource ปัจจุบันต้องการ Resource

ox_lib

ให้ถูกโหลดก่อน

ตามเอกสาร Cfx.re dependency ใช้กำหนดให้ Resource ที่ระบุถูกโหลดก่อน Resource ปัจจุบัน

ดังนั้น FiveM เองจะรู้ว่า Resource มีความสัมพันธ์กันอย่างไรในระดับ Manifest

④ dependencies ใช้เมื่อมีหลายตัว

ถ้าต้องใช้ Resource หลายตัว สามารถใช้

dependencies {
    'resource-a',
    'resource-b',
    'resource-c'
}

ตัวอย่าง

dependencies {
    'ox_lib',
    'oxmysql',
    'ox_target'
}

แนวคิดคือ

ox_lib
oxmysql
ox_target
   ↓
ต้องพร้อม
   ↓
my-script

แต่ต้องระวังว่า Script ทุกตัวไม่ได้ประกาศ Dependency ทั้งหมดไว้ใน Manifest เสมอ

บาง Dependency อาจถูกระบุเฉพาะใน Documentation หรือ Config

⑤ Dependency ไม่ได้อยู่ใน fxmanifest.lua เสมอไป

สมมติ Script มี Config

Config.Inventory = 'ox_inventory'
Config.Target = 'ox_target'

แต่ fxmanifest.lua ไม่ได้ประกาศ

dependency 'ox_inventory'

Script อาจ Start ได้

แต่เมื่อผู้เล่นเปิด Inventory หรือใช้ Target ระบบจึงเกิด Error

ดังนั้นต้องอ่านทั้ง

fxmanifest.lua
README
Documentation
Config
Installation Guide

ไม่ควรดู Manifest อย่างเดียวแล้วสรุปว่า Dependency มีเพียงเท่านั้น

⑥ Hard Dependency กับ Optional Dependency ต่างกันอย่างไร

ในทางปฏิบัติสามารถแบ่ง Dependency ที่พบใน Script ได้ประมาณ 2 กลุ่ม

Hard Dependency

Resource ต้องมีจึงทำงานได้

ตัวอย่าง

dependency 'ox_lib'

ถ้าขาด Resource นี้ Script อาจไม่ Start

Optional Dependency

Script รองรับระบบเสริม แต่ไม่จำเป็นต้องใช้ทุก Server

ตัวอย่าง

ox_target
qb-target
Custom Target

Script อาจให้เลือกหนึ่งในหลายระบบผ่าน Config

เช่น

Config.Target = 'ox_target'

กรณีนี้ไม่จำเป็นต้องติดตั้ง Target ทุกตัว

ต้องติดตั้งเฉพาะตัวที่ Script ถูกตั้งค่าให้ใช้

⑦ Framework ถือเป็น Dependency หรือไม่

ถือเป็น Dependency สำคัญสำหรับ Script RP จำนวนมาก

ตัวอย่าง Framework ได้แก่

ESX
QBCore
Qbox

Script อาจเรียก Framework เพื่อดึงข้อมูล

  • Player

  • Job

  • Money

  • Identifier

  • Inventory

  • Metadata

  • Permission

ตัวอย่างเชิงแนวคิด

Garage Script
↓
Framework
↓
Player Data
↓
Vehicle Ownership

หากนำ QBCore Script ไปใช้กับ ESX โดยไม่มี Compatibility Layer Script ก็อาจไม่สามารถดึง Player Data ได้

ดังนั้นก่อนติดตั้ง Script ต้องตรวจว่า Script รองรับ Framework ใด

⑧ ESX Dependency คืออะไร

ESX Script อาจต้องใช้ Core Resource ของ ESX และ Resource เสริมอื่น ๆ

ตัวอย่างเชิงแนวคิด

ESX Job Script
↓
ESX Core
↓
Database
↓
Inventory
↓
Optional Library

Script บางตัวสร้างสำหรับ ESX Legacy รุ่นใหม่

ถ้านำไปใช้กับ ESX รุ่นเก่ามาก อาจพบปัญหา Function หรือ Event ไม่ตรงกัน

ดังนั้นคำว่า

ESX Compatible

ยังไม่เพียงพอ

ควรตรวจ Version และ Documentation ด้วย

⑨ QBCore Dependency คืออะไร

QBCore Script มักพึ่งพา qb-core และอาจมี Resource เสริม เช่น

qb-target
qb-menu
qb-input
Inventory
Database

ขึ้นอยู่กับ Script

ตัวอย่าง

qb-job-script
↓
qb-core
↓
Player Data
Jobs
Functions

ถ้า qb-core ไม่พร้อม Script ที่เรียก Core Object หรือ Functions ก็อาจ Error

ดังนั้น Start Order ของ Core จึงสำคัญ

⑩ Qbox Dependency ต้องตรวจอะไร

Qbox มี Core และ ecosystem ของตัวเอง และใช้งานร่วมกับ Resource จาก OX ecosystem หลายตัว

Script สำหรับ Qbox อาจต้องการ Resource เช่น

qbx_core
ox_lib
oxmysql
ox_inventory
ox_target

ขึ้นอยู่กับ Script

ถ้านำ QBCore Script มาใช้บน Qbox ต้องตรวจ Compatibility ของ Script นั้นโดยตรง

แม้ Qbox มี Compatibility สำหรับ QB ecosystem หลายส่วน แต่ไม่ได้หมายความว่า Script ทุกตัวจะเข้ากันได้ 100%

⑪ ox_lib เป็น Dependency ทำอะไร

ox_lib เป็น Library ที่ Script FiveM จำนวนมากใช้เป็นเครื่องมือกลาง

Script อาจใช้ความสามารถ เช่น

  • Context Menu

  • Input Dialog

  • Alert Dialog

  • Callback

  • Zones

  • Notifications

  • Utility Functions

ดังนั้นเมื่อ Script ระบุ

Requires ox_lib

หมายความว่า Code ของ Script อาจเรียก Function จาก ox_lib

ถ้าไม่มี Resource นี้ การลบคำว่า Dependency ออกจาก Manifestไม่ได้สร้าง Function เหล่านั้นขึ้นมา

Script จึงยังมีโอกาส Error อยู่ดี

⑫ oxmysql เป็น Dependency ทำอะไร

oxmysql เป็น Resource ที่ใช้ช่วยเชื่อม FiveM Scripts กับ MySQL/MariaDB Database

Script ที่ต้องเก็บข้อมูล เช่น

  • Phone

  • Banking

  • Garage

  • Housing

  • Inventory

  • Character

  • Jobs

อาจต้องใช้ Database

ตัวอย่าง

Garage
↓
oxmysql
↓
Database
↓
ข้อมูลรถผู้เล่น

ถ้า oxmysql ไม่ทำงาน Resource หลักอาจ Start ได้บางส่วน แต่ Query Database จะล้มเหลว

ดังนั้นต้องตรวจทั้ง Resource และ Database Connection

⑬ ox_target เป็น Dependency ทำอะไร

Target System ใช้สร้าง Interaction กับ

  • NPC

  • Entity

  • Vehicle

  • Object

  • Zone

ตัวอย่าง

เดินเข้าใกล้ NPC
↓
ox_target
↓
แสดงตัวเลือก
↓
เปิด Job Menu

ถ้า Script ตั้ง

Config.Target = 'ox_target'

แต่ Server ไม่มี ox_target

Resource อาจ Started ได้ แต่ผู้เล่นมองไม่เห็น Interaction

นี่เป็นตัวอย่างชัดเจนของ Dependency ที่อาจทำให้เกิดอาการ

Script Start แต่ใช้งานไม่ได้

⑭ Inventory เป็น Dependency ได้อย่างไร

Script จำนวนมากเชื่อมกับ Inventory

ตัวอย่าง

Crafting Script
↓
ตรวจ Item
↓
Remove Item
↓
Add Item
↓
Inventory

หรือ

Police Script
↓
Search Player
↓
เปิด Inventory

หาก Script สร้างสำหรับ Inventory A แต่ Server ใช้ Inventory B ต้องมี Integration ที่รองรับ

Resource สามารถ Start ได้ แต่ระบบ Item อาจใช้ไม่ได้

ดังนั้น Inventory Compatibility เป็นหนึ่งในสิ่งที่ควรตรวจทุกครั้งก่อนซื้อหรือติดตั้ง Script

⑮ Voice Script ก็สามารถเป็น Dependency ได้

ระบบบางตัวต้องเชื่อมกับ Voice เช่น

Radio
Phone Calls
Police Radio
Proximity Voice

อาจต้องใช้ Resource เช่น pma-voice

ตัวอย่าง

Phone Script
↓
Call System
↓
Voice Resource

ถ้า Voice Integration ไม่ตรง การเปิด Phone อาจทำงานปกติ แต่ Voice Call ใช้ไม่ได้

ดังนั้น Script หนึ่ง Resource สามารถมี Dependency หลายระดับและหลายประเภท

⑯ Dependency มีลำดับชั้นได้

สมมติ

Script A
↓
ต้องใช้ Script B

Script B
↓
ต้องใช้ Library C

Library C
↓
ต้องใช้ Requirement D

ถ้า D มีปัญหา

D ล้ม
↓
C ล้ม
↓
B ล้ม
↓
A ล้ม

นี่เป็นเหตุผลว่าทำไม FiveM Server บางครั้งมี Error 30 Resource พร้อมกัน แต่ Root Cause อาจมีเพียง Core Resource เดียว

เมื่อตรวจ Error ควรหา Dependency ล่างสุดที่ล้มเหลวก่อน

⑰ Start Order เกี่ยวอะไรกับ Dependency

Resource ที่ถูกพึ่งพาควรพร้อมก่อน Resource ที่เรียกใช้งาน

ตัวอย่าง

ensure oxmysql
ensure ox_lib
ensure my-script

ถ้า my-script ต้องใช้ทั้งสองตัว

การเขียนกลับด้าน เช่น

ensure my-script
ensure ox_lib
ensure oxmysql

อาจทำให้ Script Initialize ตอน Dependency ยังไม่พร้อม

อาการที่พบบ่อยคือ

Restart Server → Script ใช้ไม่ได้

แต่หลัง Server เปิดเสร็จแล้วสั่ง

ensure my-script

ใหม่กลับใช้งานได้

นี่เป็นสัญญาณสำคัญว่า Start Order อาจผิด

⑱ Dependency ใน server.cfg ควรเรียงอย่างไร

ไม่มีลำดับเดียวที่ใช้ได้กับทุก Server แต่สามารถคิดเป็น Layer ได้

ตัวอย่างเชิงแนวคิด

Database
↓
Core / Framework
↓
Libraries
↓
Inventory / Target
↓
Gameplay Systems
↓
Jobs / Custom Scripts

เช่น

ensure oxmysql

ensure framework-resource

ensure ox_lib
ensure ox_target

ensure inventory-resource

ensure my-job
ensure my-garage

แต่ควรยึด Documentation ของ Framework และ Script จริงเป็นหลัก

อย่าจัดลำดับเพียงเพราะชื่อ Category ดูเหมาะสม

⑲ Category อาจทำให้ Dependency ซ่อนอยู่

สมมติ server.cfg

ensure [scripts]
ensure [core]

ใน [scripts] มี Script ที่ต้องใช้ Resource ใน [core]

Script อาจถูกเรียกก่อน Core

ควรคิดถึง Dependency ระหว่าง Category ด้วย

เช่น

ensure [core]
ensure [libraries]
ensure [scripts]

อย่างไรก็ตาม Resource ภายใน Category ก็อาจมี Dependency ต่อกันเองอีก

ดังนั้น Server ขนาดใหญ่ควรมีโครงสร้าง Resource ที่ออกแบบตาม Dependency จริง

⑳ Dependency Version สำคัญหรือไม่

สำคัญมาก

บางครั้ง Server มี Resource ที่ Script ต้องการครบ

เช่น

ox_lib ✓
oxmysql ✓
Framework ✓

แต่ยัง Error

เพราะ Script ต้องการ API จาก Version ใหม่กว่า

ตัวอย่าง

Script ใหม่
↓
เรียก Export ใหม่
↓
Dependency เก่าไม่มี
↓
No such export

กรณีนี้ FiveM อาจไม่ขึ้น Missing Dependency เพราะ Resource มีอยู่จริง

แต่เกิด Compatibility Error แทน

ดังนั้นต้องตรวจทั้ง

Dependency มีหรือไม่

และ

Dependency Version รองรับหรือไม่

㉑ No Such Export เกี่ยวกับ Dependency อย่างไร

ตัวอย่าง

my-script
↓
เรียก Export X
↓
ox_lib

ถ้า ox_lib Start อยู่ แต่ Version ที่ติดตั้งไม่มี Export X

อาจขึ้น

No such export

นี่ไม่ใช่ Missing Dependency แบบตรง ๆ เพราะ Dependency มีอยู่

แต่เป็น Dependency API ไม่ Compatible

ให้ตรวจ

  • Version ของ Script

  • Version ของ Dependency

  • Changelog

  • Export Name

  • Documentation

ก่อนแก้ Code

㉒ Update Script แล้วมี Dependency ใหม่

กรณีนี้พบบ่อย

Version เดิม

my-script v1
↓
Framework

Version ใหม่

my-script v2
↓
Framework
ox_lib

ถ้าอัปเดต Script อย่างเดียว จะเกิด Error

ดังนั้นก่อน Update ต้องอ่าน

Changelog
Requirements
Dependencies
Migration Guide

ทุกครั้ง

โดยเฉพาะ Major Version

㉓ Update Dependency แล้ว Script เก่าใช้ไม่ได้

ปัญหาสามารถเกิดย้อนกลับได้เช่นกัน

Script เก่า
↓
ใช้ API เก่า
↓
Update Dependency
↓
API เปลี่ยน
↓
Script Error

ดังนั้นการ Update Core Library ไม่ควรทำเพราะเห็น Version ใหม่แล้ว Update ทันทีบน Production

ควร

Backup
↓
อ่าน Breaking Changes
↓
Test Server
↓
ทดสอบ Resource ลูก
↓
ค่อย Update Production

Dependency เพียงตัวเดียวอาจถูกใช้โดย Script หลายสิบตัว

㉔ Runtime Constraint ก็ถือเป็น Dependency

FiveM dependency รองรับ Requirement ที่ไม่ได้เป็น Resource ด้วย

ตัวอย่างจากรูปแบบที่ Cfx.re รองรับ

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

ดังนั้น Dependency สามารถหมายถึง

Server Build
OneSync
Game Build
Policy
Native

ไม่ใช่เพียง Script อีกตัวหนึ่ง

นี่เป็นรายละเอียดที่คนเริ่ม FiveM Server มักไม่รู้

㉕ /server คืออะไร

ตัวอย่าง

dependency '/server:4500'

หมายถึง Resource ต้องการ Server Build ขั้นต่ำตามตัวเลขที่กำหนด

ถ้า FXServer เก่าเกิน Requirement Resource อาจไม่สามารถทำงานได้

วิธีแก้ควรเป็น

ตรวจ Artifact/Server Build
↓
Backup
↓
Update Server
↓
ทดสอบ Resource

ไม่ใช่ลบ Requirement ออกจาก Manifest โดยไม่รู้เหตุผล

㉖ /onesync คืออะไร

Manifest สามารถกำหนด

dependency '/onesync'

เพื่อบอกว่า Resource ต้องการ State Awareness

หาก Environment ของ Server ไม่ตรง Resource ก็อาจไม่ผ่าน Requirement

ควรตรวจ OneSync Configuration และ Documentation ของ Resource

อย่าข้าม Requirement เพราะ Script อาจใช้ Feature ที่พึ่งพา OneSync จริง

㉗ /gameBuild คืออะไร

Resource บางตัวต้องการ Game Build ขั้นต่ำ

ตัวอย่าง

dependency '/gameBuild:h4'

ตามเอกสาร Cfx.re Constraint แบบนี้ใช้กำหนด Minimum Game Build ได้

Resource ประเภท

  • Map

  • MLO

  • Vehicle

  • Script ที่ใช้ Native ใหม่

  • Content จาก GTA V Update ใหม่

อาจต้องใช้ Game Build เฉพาะ

ถ้า Build ต่ำเกินไป การแก้ Script อย่างเดียวอาจไม่ช่วย

㉘ /native คืออะไร

Resource สามารถกำหนด Requirement ว่า Server ต้องรองรับ Server-side Native บางตัว

รูปแบบเช่น

dependency '/native:0xE27C97A0'

ถ้า Server Environment ไม่รองรับ Native ที่กำหนด Resource ก็อาจไม่สามารถทำงานตาม Requirement

นี่แสดงให้เห็นว่า Dependency ของ FiveM สามารถตรวจ Capability ของ Server ได้ ไม่ใช่แค่ชื่อ Resource

㉙ /policy คืออะไร

อีก Runtime Constraint คือ Policy Requirement

ตัวอย่างรูปแบบ

dependency '/policy:subdir_file_mapping'

ใช้กำหนดว่า Server Key ต้องได้รับ Policy ที่เกี่ยวข้อง

กรณีนี้การติดตั้ง Resource เพิ่มไม่ได้แก้ปัญหา เพราะ Requirement อยู่ที่ Server Policy

ต้องอ่านข้อความ Error และ Documentation ให้ตรงกับประเภท Dependency

㉚ ทำไมไม่ควรลบ dependency ออกจาก fxmanifest.lua

สมมติ Script มี

dependency 'ox_lib'

แต่ Server ไม่มี ox_lib

ถ้าลบบรรทัดนี้

Missing Dependency อาจไม่ขึ้นแบบเดิม

แต่ Code ภายในยังอาจเรียก

ox_lib functions
exports
callbacks

ผลลัพธ์อาจกลายเป็น Error อื่น เช่น

No such export
attempt to call a nil value
SCRIPT ERROR

จึงเป็นการ “ซ่อนตัวตรวจสอบ” ไม่ใช่แก้ต้นเหตุ

แนวทางของ comsiam คือ Dependency ที่ Developer ระบุควรถูกมองเป็น Requirement จนกว่าจะพิสูจน์ได้จาก Documentation ว่าเป็น Optional

㉛ Rename Dependency ได้หรือไม่

ทางเทคนิค Resource สามารถตั้งชื่อได้หลายแบบ แต่ใน ecosystem จริง Resource อื่นอาจอ้างชื่อไว้โดยตรง

ตัวอย่าง

dependency 'ox_lib'

ถ้า Rename Folder เป็น

my-ox-lib

Resource ที่กำหนด ox_lib ก็จะหา Dependency เดิมไม่เจอ

นอกจากนี้ Code อาจมี

exports['ox_lib']

หรือ Reference ชื่อ Resourceอื่นอีก

ดังนั้น Core Resource ไม่ควร Rename เพียงเพื่อจัดชื่อให้สวย

㉜ Dependency Folder ซ้อนทำให้เกิดอะไร

ตัวอย่างผิด

resources/
└── ox_lib/
    └── ox_lib/
        └── fxmanifest.lua

Resource ที่ FiveM Parse อาจไม่ตรงกับชื่อที่ Script ต้องการ

ควรเป็น

resources/
└── ox_lib/
    └── fxmanifest.lua

หลังแก้ใช้

refresh
ensure ox_lib

แล้วตรวจ Console

นี่เป็นหนึ่งในปัญหาที่พบมากหลังแตก ZIP

㉝ Resource มี Dependency แต่ FiveM หาไม่เจอ

ให้ตรวจตามลำดับ

Dependency มี Folder?
↓
ชื่อถูก?
↓
fxmanifest.lua มี?
↓
Folder ซ้อน?
↓
Server Data ถูก?
↓
refresh แล้ว?
↓
Dependency Start ได้?

ถ้าตอบได้ครบ จะสามารถแยกได้ว่าเป็น

Resource Discovery Problem

หรือ

Dependency Runtime Problem

สองอย่างนี้ต้องแก้คนละทาง

㉞ Dependency อยู่คนละ txAdmin Profile

ถ้ามี

Production
Test Server
Development

หลาย Profile ต้องระวังว่า Resource ที่ติดตั้งอยู่ใน Profile ไหน

ตัวอย่าง

Test Server
→ มี ox_lib

Production
→ ไม่มี ox_lib

แต่กำลังเปิด Production

Script ก็ยัง Missing Dependency

ตรวจ Server Data Path และ Profile ที่ Run จริงทุกครั้งเมื่อไฟล์ดูเหมือนครบแต่ FiveM หาไม่พบ

㉟ Script Started แล้ว Dependency ยังมีปัญหาได้ไหม

ได้

Dependency บางตัวเป็น Optional/Integration Dependency ไม่ใช่ Hard Dependency

ตัวอย่าง Script Start ได้ แต่ Config ตั้ง

Config.Inventory = 'ox_inventory'

เมื่อผู้เล่นเปิด Stash ระบบจึงเรียก Inventory

ถ้า Inventory ไม่พร้อม Error จะเกิดตอนนั้น

ดังนั้น

Started resource

ไม่ได้แปลว่า Dependency ของทุก Feature ทำงานครบ

ต้องทดสอบ Workflow จริง

㊱ วิธีดูว่า Script ใช้ Dependency อะไรบ้าง

ตรวจ 5 จุดหลัก

1. README

ค้นหา

Requirements
Dependencies
Installation

2. fxmanifest.lua

ค้นหา

dependency
dependencies

3. config.lua

ค้นหา

Framework
Inventory
Target
Notification
Voice

4. Source Code

หากเปิดได้ ค้นหาชื่อ Resource เช่น

ox_lib
ox_inventory
qb-core
qbx_core

5. Documentation

ดู Compatibility Matrix และ Version Requirement

วิธีนี้จะได้ภาพ Dependency ที่ครบกว่าดู Manifest อย่างเดียว

㊲ วิธีจัด Dependency ของ Server ให้อ่านง่าย

Server ใหญ่ควรแบ่ง Resource เป็น Category

ตัวอย่าง

[database]
[framework]
[libraries]
[inventory]
[target]
[jobs]
[systems]

แล้วจัด server.cfg ให้สอดคล้องกับ Dependency

ตัวอย่างเชิงแนวคิด

# Database
ensure oxmysql

# Framework
ensure [framework]

# Libraries
ensure ox_lib

# Target / Inventory
ensure ox_target
ensure inventory-resource

# Gameplay
ensure [jobs]
ensure [systems]

ไม่จำเป็นต้องใช้โครงสร้างนี้เหมือนกันทุก Server แต่ควรมี Logic ที่คนดูแลคนอื่นอ่านแล้วเข้าใจ

㊳ Dependency เยอะทำให้ Server ช้าหรือไม่

จำนวน Dependency ไม่ได้เป็นตัวชี้วัด Performance โดยตรง

Script ที่ใช้ Library หลายตัวแต่เขียนดีอาจเบากว่า Standalone Script ที่มี Loop หนักมาก

ควรดู

CPU
Resmon
Server Profiler
Database Queries
Network
Script Design

มากกว่าการนับจำนวน Dependency

ดังนั้นไม่ควรหลีกเลี่ยง Dependency ทุกชนิดเพียงเพราะกลัว Server หนัก

บาง Library ช่วยลด Code ซ้ำและทำให้ระบบดูแลง่ายขึ้นด้วยซ้ำ

㊴ Dependency มากเกินไปมีข้อเสียอะไร

แม้ Dependency จะมีประโยชน์ แต่ Dependency Chain ที่ซับซ้อนก็มีข้อเสีย

เช่น

Script A
↓
Library B
↓
Core C
↓
Resource D

ถ้า D มีปัญหา A, B และ C อาจได้รับผลกระทบ

ข้อเสียที่ควรระวัง ได้แก่

  • Update ยากขึ้น

  • Version Conflict

  • Startup Order ซับซ้อน

  • Debug ยากขึ้น

  • Core Failure กระทบหลาย Script

  • Migration ยากขึ้น

ดังนั้นเลือก Script ควรดู Dependency ด้วย ไม่ใช่ดู Feature อย่างเดียว

㊵ Standalone Script ไม่มี Dependency จริงหรือไม่

ไม่เสมอไป

คำว่า Standalone มักหมายถึง Script ไม่พึ่ง Framework ใหญ่ เช่น ESX หรือ QBCore

แต่ยังสามารถต้องใช้

ox_lib
Database
Voice
Target
UI Library

ได้

ดังนั้น

Standalone
≠
Zero Dependencies

ต้องอ่าน Requirements ของ Script ทุกครั้ง

㊶ Dependency กับ Framework ต่างกันอย่างไร

Framework เป็นระบบ Core ขนาดใหญ่

เช่น

ESX
QBCore
Qbox

ส่วน Dependency เป็นคำกว้างกว่า

Framework สามารถเป็น Dependency ได้

Library ก็เป็น Dependency ได้

Database Connector ก็เป็น Dependency ได้

แม้แต่ Server Build ก็สามารถเป็น Runtime Dependency ได้

ดังนั้นความสัมพันธ์คือ

Framework
สามารถเป็น
Dependency

แต่

Dependency
ไม่ได้หมายถึง Framework เสมอไป

㊷ Dependency กับ Export ต่างกันอย่างไร

Dependency คือการบอกว่า Resource หนึ่งต้องพึ่งพาอีก Resource

ส่วน Export คือ Function ที่ Resource หนึ่งเปิดให้ Resource อื่นเรียกใช้

ตัวอย่าง

Resource A
↓
Dependency
Resource B
↓
Resource B มี Export
↓
A เรียก Export ของ B

ถ้า B ไม่มี

Missing Dependency

อาจเกิด

แต่ถ้า B มีอยู่แล้ว แต่ Export ที่ A เรียกไม่มี

อาจเกิด

No such export

สองเรื่องเกี่ยวข้องกันแต่ไม่เหมือนกัน

㊸ Dependency กับ Event ต่างกันอย่างไร

Event เป็นวิธีสื่อสารหรือส่งเหตุการณ์ระหว่างส่วนต่าง ๆ ของ Script

Dependency คือ Requirement ว่า Resource ต้องการอะไร

ตัวอย่าง

my-script
↓
Dependency = Framework
↓
ใช้ Event ของ Framework
↓
รับ Player Data

ถ้า Framework ไม่มี Resource อาจไม่พร้อม

ถ้า Framework มีแต่ Event API เปลี่ยน Script อาจเกิด Compatibility Error

ดังนั้น Error อาจเกิดได้ทั้งระดับ Dependency และ API

㊹ วิธีแก้ Dependency Error แบบเป็นระบบ

ใช้ขั้นตอนนี้

ขั้นที่ 1

อ่าน Error และจดชื่อ Dependency

ขั้นที่ 2

ตรวจ

resources/dependency-name/

ขั้นที่ 3

ตรวจ

fxmanifest.lua

ขั้นที่ 4

อ่าน Documentation เพื่อดู Version Requirement

ขั้นที่ 5

ใช้

refresh

ขั้นที่ 6

ใช้

ensure dependency-name

ขั้นที่ 7

แก้ Error ของ Dependency ให้หมดก่อน

ขั้นที่ 8

จัด server.cfg ให้ Dependency Start ก่อน

ขั้นที่ 9

ใช้

ensure my-script

ขั้นที่ 10

ทดสอบ Feature จริง

อย่าหยุดเพียงเพราะ Resource ขึ้น Started

㊺ ถ้ามี Dependency หลายตัวควรติดตั้งทีละตัว

ควร

สมมติ Script ต้องใช้

oxmysql
ox_lib
ox_target
inventory

อย่าติดตั้งทั้งหมดแล้ว Restart Serverเพียงครั้งเดียวหากเป็นมือใหม่

ควร

ติดตั้ง oxmysql
↓
ทดสอบ

ติดตั้ง ox_lib
↓
ทดสอบ

ติดตั้ง ox_target
↓
ทดสอบ

ติดตั้ง Script หลัก
↓
ทดสอบ

เมื่อเกิด Error จะรู้ทันทีว่าเริ่มจาก Resource ใด

นี่เป็นวิธีที่ comsiam แนะนำสำหรับ Server ใหม่และช่วง Development

㊻ Checklist FiveM Dependency

ก่อนติดตั้ง Script ให้ตรวจ

Framework

  • รองรับ ESX/QBCore/Qbox หรือไม่

  • Version ตรงหรือไม่

Libraries

  • ต้องใช้ ox_lib หรือไม่

  • ต้องใช้ Library อื่นหรือไม่

Database

  • ต้องใช้ oxmysql หรือไม่

  • ต้อง Import SQL หรือไม่

Gameplay Integration

  • Inventory

  • Target

  • Voice

  • Notification

  • Menu

  • Dispatch

Runtime

  • Server Build

  • OneSync

  • Game Build

  • Native

  • Policy

Resource

  • ชื่อ Folder ถูก

  • fxmanifest.lua มี

  • Folder ไม่ซ้อน

  • Start Order ถูก

ถ้าตรวจครบก่อนติดตั้ง จะลด Missing Dependency และ Compatibility Error ได้มาก

สรุป FiveM Dependency คืออะไร

FiveM Dependency คือ Resource หรือ Requirement ที่ Resource อื่นต้องใช้เพื่อให้สามารถทำงานได้อย่างถูกต้อง

ตัวอย่างใน fxmanifest.lua

dependency 'ox_lib'

หรือ

dependencies {
    'ox_lib',
    'oxmysql'
}

หมายความว่า Resource ปัจจุบันต้องพึ่งพา Resource ที่ระบุ และ FiveM จะใช้ข้อมูลนี้ในการจัด Requirement ของ Resource

Dependency ที่พบใน FiveM Server มีได้หลายประเภท เช่น

Framework
Library
Database
Inventory
Target
Voice
Resource อื่น
Server Build
OneSync
Game Build
Native
Policy

ดังนั้นหาก Script ขึ้น Missing Dependency สิ่งที่ควรทำคือ ติดตั้งและทำให้ Dependency ที่ต้องการทำงานได้ก่อน ไม่ใช่ลบ dependency ออกจาก fxmanifest.lua

อีกเรื่องสำคัญคือ Dependency มีอยู่ไม่ได้แปลว่าจะ Compatible เสมอไป เพราะ Version ของ Library หรือ Framework อาจไม่ตรงกับ Script และนำไปสู่ Error อย่าง No such export หรือ Function ที่หายไปได้

แนวทางของ comsiam คือก่อนติดตั้ง Script ทุกตัวควรอ่าน Requirements และวาด Dependency Chain คร่าว ๆ ว่า Resource นี้พึ่งอะไรบ้าง วิธีนี้ทำให้จัด server.cfg และแก้ Error ได้ง่ายขึ้นมาก

สำหรับ FiveM Server ขนาดใหญ่ comsiam แนะนำให้มอง Dependency เป็นโครงสร้างหลักของ Server ไม่ใช่ไฟล์เสริม เพราะ Core Resource เพียงตัวเดียว เช่น Framework, Library หรือ Database Layer สามารถส่งผลต่อ Script จำนวนมากได้พร้อมกัน หากวาง Dependency และ Start Order ดีตั้งแต่แรก Server จะดูแลและอัปเดตง่ายขึ้นอย่างเห็นได้ชัด

Comments

Popular posts from this blog

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

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

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