วิธีติดตั้ง ox_inventory FiveM แบบถูกต้อง ใช้กับ Qbox ESX และ OX

การติดตั้ง ox_inventory ใน FiveM ต้องทำมากกว่าการนำ Folder ไปใส่ใน resources เพราะ Inventory เป็นระบบใหญ่ที่เชื่อมกับ Framework, Database, Player Data, Items, Weapons, Shops, Stashes และ Vehicles

หากติดตั้งผิดอาจเกิดปัญหา เช่น

Inventory เปิดไม่ได้
Item หาย
Player Data โหลดไม่ได้
ox_lib Error
Database Error
Missing Dependency
Framework Bridge ผิด
Trunk/Glovebox ไม่บันทึก
Weapons ใช้งานไม่ได้

ลำดับพื้นฐานที่ควรเข้าใจคือ

Database
↓
oxmysql
↓
ox_lib
↓
Framework
↓
ox_target (ถ้าใช้)
↓
ox_inventory
↓
Jobs / Shops / Housing / Custom Scripts

สำหรับ Server ใหม่ควรติดตั้งให้ Base Inventory ทำงานสมบูรณ์ก่อน แล้วจึงเพิ่ม Scripts อื่นทีละระบบ

① ox_inventory ต้องใช้อะไรบ้าง

Dependencies หลักของ ox_inventory ปัจจุบันคือ

oxmysql
ox_lib
OneSync

และมี Requirement ด้าน FXServer Build ตาม Manifest ของ Resource

ส่วน

ox_target

เป็น Optional Dependency ที่ช่วยเพิ่ม Target Interaction

ดังนั้นขั้นต่ำควรมี

FXServer
+
Database
+
oxmysql
+
ox_lib
+
Framework ที่รองรับ
+
ox_inventory

② Framework ที่รองรับมีอะไรบ้าง

Current Official Project ระบุ Framework หลัก ได้แก่

ox_core
ESX
Qbox
ND Core

โดย Configuration ใช้ชื่อ Framework เช่น

setr inventory:framework "ox"
setr inventory:framework "esx"

หรือ

setr inventory:framework "qbx"

ต้องตั้งให้ตรงกับ Framework ที่ Server ใช้จริง

③ QBCore ใช้ ox_inventory ได้โดยตรงไหม

Current Official Support ไม่ได้ระบุ qb-core Native แบบเดียวกับ Qbox

ดังนั้น Server QBCore เดิมไม่ควรใส่

setr inventory:framework "qb"

แล้วคาดว่าจะเป็น Official Integration ทันที

หากต้องการใช้ OX Inventory กับ QB ecosystem ควรตรวจ Bridge/Migration ที่ใช้จริง หรือพิจารณา Qbox หากกำลัง Migration Framework อยู่แล้ว

④ Qbox ใช้ ox_inventory ได้ไหม

ได้ และเป็น Stack ที่เข้ากันอย่างใกล้ชิด

Qbox Configuration ใช้

setr inventory:framework "qbx"

และ Official Integration แนะนำให้ Start ox_inventory หลัง qbx_core

ตัวอย่าง

ensure oxmysql
ensure ox_lib
ensure qbx_core
ensure ox_target
ensure ox_inventory

⑤ ESX ใช้ ox_inventory ได้ไหม

ได้

กำหนด

setr inventory:framework "esx"

จากนั้น Start ตามแนวคิด

ensure oxmysql
ensure ox_lib
ensure es_extended
ensure ox_target
ensure ox_inventory

แต่ถ้า Server ESX เดิมมี Inventory System อยู่แล้ว ต้องตรวจ Compatibility ก่อน

⑥ ox_core ใช้ ox_inventory ได้ไหม

ได้

ox_inventory เป็น Optional Dependency ที่แนะนำอย่างมากสำหรับ ox_core

Stack สามารถเป็น

ensure oxmysql
ensure ox_lib
ensure ox_core
ensure ox_target
ensure ox_inventory

ทำให้ Framework ดูแล Character/Player ส่วน Inventory ดูแล Items และ Storage

⑦ อย่าติดตั้ง ox_inventory ทับ Inventory เดิมทันที

นี่เป็นข้อผิดพลาดใหญ่ที่สุดอย่างหนึ่ง

สมมติ Server มี

qb-inventory

หรือ Inventory ของ ESX เดิม

อย่าทำ

หยุด Inventory เดิม
↓
ใส่ ox_inventory
↓
Restart Production

โดยไม่ Audit Scripts

เพราะ Jobs, Housing, Phone, Shops และ Garages อาจเรียก API ของ Inventory เดิมทั้งหมด

⑧ Official Documentation เตือนเรื่องนี้โดยตรง

ox_inventory เป็น Complete Replacement ของระบบ Item, Inventory และ Weapon บาง Framework

ดังนั้นการ Replace Inventory เดิมสามารถทำให้เกิด Compatibility Errors

Resource ที่ต้องตรวจ ได้แก่

Police
EMS
Jobs
Phone
Housing
Garage
Vehicle Keys
Shops
Crafting
Businesses
Robbery
Drug Scripts

ก่อน Production Migration

⑨ Backup ก่อนติดตั้งบน Server เดิม

Backup อย่างน้อย

Database
resources/
server.cfg
Framework Config
Item Definitions
Inventory Data
Stashes
Vehicle Data

ถ้าเป็น Production ให้สร้าง Database Clone แล้วทดสอบบน Test Server ก่อน

อย่าทดลอง Inventory Conversion ครั้งแรกกับข้อมูลผู้เล่นจริงชุดเดียว

⑩ ดาวน์โหลด ox_inventory แบบไหนดี

สำหรับ Server Owner ทั่วไป ควรใช้

Latest Release

เพราะ Release มี Web UI ที่ Build แล้ว

ไม่ควรเริ่มจาก

Source Code ZIP

ถ้าไม่เข้าใจ Build Process

เพราะ Source อาจต้อง Build UI ก่อนจึงใช้งานได้

⑪ Current ox_inventory Version

Version ที่ตรวจสอบสำหรับบทความนี้คือ

2.47.9

แต่ไม่ควรยึดตัวเลขนี้เป็นค่าถาวร

ให้ยึด Current Stable Release ณ วันที่ติดตั้งจริง

และตรวจ Minimum Version ของ Dependencies ด้วย

⑫ Current Dependency Version Check

Current Source ตรวจอย่างน้อย

oxmysql >= 2.7.3
ox_lib >= 3.36.4

ใน Snapshot ปัจจุบัน

หาก Version ต่ำกว่า Inventory สามารถหยุด Initialization ได้

อย่าลบ Version Check เพื่อบังคับ Resource ให้เปิด

⑬ แตกไฟล์ให้ถูก

หลัง Download ควรได้

ox_inventory/
├── fxmanifest.lua
├── init.lua
├── client.lua
├── server.lua
├── data/
├── modules/
├── web/
└── ...

สิ่งสำคัญคือ

fxmanifest.lua

ต้องอยู่ Root ของ Resource

⑭ Folder ซ้อนผิดเป็นแบบไหน

ผิด

resources/
└── ox_inventory/
    └── ox_inventory/
        ├── fxmanifest.lua

ถูก

resources/
└── ox_inventory/
    ├── fxmanifest.lua

หาก Folder ซ้อน FiveM อาจหา Resource Manifest ไม่เจอ

⑮ ชื่อ Folder ควรเป็น ox_inventory

อย่า Rename เป็น

ox_inventory-main
inventory_new
my_inventory

โดยไม่จำเป็น

เพราะ Scripts จำนวนมากเรียก

exports.ox_inventory

โดยอิงชื่อ Resource

ชื่อที่ปลอดภัยที่สุดคือ

ox_inventory

⑯ ตรวจ UI Build

Current Resource ใช้

web/build/index.html

เป็น NUI Entry

หากไฟล์นี้ไม่มี จะเจอ Error ประมาณ

UI has not been built

ให้ใช้ Official Release หรือ Build Source ให้สมบูรณ์

การ Clear Cache ไม่สามารถสร้างไฟล์ Build ที่ไม่มีได้

⑰ ถ้าจะ Build Source เอง

Current Documentation มี Workflow ประมาณ

git clone ...
cd ox_inventory/web
bun i
bun run build

เหมาะกับ Developer ที่แก้ Source/UI เอง

ถ้าเพียงต้องการเปิด Server ควรใช้ Release พร้อมใช้มากกว่า

⑱ ติดตั้ง oxmysql ก่อน

ox_inventory ต้องใช้

oxmysql

เพื่อบันทึก Inventory Data

ตรวจว่า

ensure oxmysql

Start สำเร็จก่อน

และ Database Connection ต้องทำงาน

อย่า Debug Inventory ก่อน Database Layer ผ่าน

⑲ ติดตั้ง ox_lib ก่อน

ox_inventory ยังต้องใช้

ox_lib

Current Manifest Import

@ox_lib/init.lua

โดยตรง

ดังนั้น ox_lib ต้อง Start ก่อน Inventory

ensure ox_lib

⑳ Start Framework ก่อน Inventory

หลัง Dependencies แล้วต้อง Start Framework

ตัวอย่าง Qbox

ensure qbx_core

ESX

ensure es_extended

ox_core

ensure ox_core

แล้วจึง Start Inventory

㉑ ox_target ต้อง Start ก่อน ox_inventory ถ้าเปิดใช้

ถ้าตั้ง

setr inventory:target true

ควร Start

ensure ox_target

ก่อน

ensure ox_inventory

Current Source จะตรวจสถานะ ox_target

ถ้าเปิด Target แต่ Target ไม่ Start ระบบจะปิด Target Integration และแจ้งเตือน

㉒ Start Order ที่แนะนำ

ภาพรวม

ensure oxmysql
ensure ox_lib
ensure framework
ensure ox_target
ensure ox_inventory

Framework ต้องแทนด้วยของจริง เช่น

qbx_core
es_extended
ox_core

ไม่ใช่เขียนคำว่า framework ลงใน server.cfg

㉓ ตัวอย่าง Qbox server.cfg

setr inventory:framework "qbx"

ensure oxmysql
ensure ox_lib
ensure qbx_core
ensure ox_target
ensure ox_inventory

นี่เป็น Base Order ที่อ่านง่ายและเหมาะกับการ Debug

㉔ Qbox ต้องใช้ qbx_vehicles ด้วยหรือไม่

Current Qbox Bridge ของ ox_inventory ตรวจ Dependency ของ Qbox components ที่เกี่ยวข้อง

ใน Source ปัจจุบันมีการตรวจอย่างน้อย

qbx_core >= 1.18.1
qbx_vehicles >= 1.2.0

ใน Snapshot ที่ตรวจสอบ

ดังนั้น Qbox Server ที่ใช้ Version เก่ามากควร Update Stack ให้เข้ากัน

㉕ ตัวอย่าง ESX server.cfg

setr inventory:framework "esx"

ensure oxmysql
ensure ox_lib
ensure es_extended
ensure ox_target
ensure ox_inventory

ถ้าไม่ใช้ Target

setr inventory:target false

และไม่จำเป็นต้อง Start ox_target เพื่อ Inventory Feature พื้นฐาน

㉖ inventory:framework ต้องมาก่อน Start

ต้องกำหนด Convar ก่อน

ensure ox_inventory

เช่น

setr inventory:framework "qbx"

ensure ox_inventory

ไม่ควรตั้ง Framework หลัง Resource Start แล้ว

เพราะ Bridge ถูกเลือกตอน Initialization

㉗ อย่าแก้ init.lua เป็น Config

Current Source ของ ox_inventory/init.lua เขียนเตือนชัดว่า

Do not modify this file as a config file

การตั้งค่าควรทำผ่าน

Convars

ใน server.cfg หรือ Config File ที่ exec เข้ามา

ช่วยให้ Update Resource ง่ายกว่า

㉘ ตั้งจำนวน Slots

ตัวอย่าง

setr inventory:slots 50

หมายถึง Player Inventory มี Default Slots จำนวน 50

Framework บางตัวอาจ Override ได้

ควรเลือกตาม Economy Design

ไม่ควรเพิ่ม 200 Slots เพียงเพราะ Player บ่นว่าของเต็ม

㉙ ตั้ง Weight

ตัวอย่าง

setr inventory:weight 30000

หน่วยเป็นกรัม

ดังนั้น

30000
=
30 kg

โดยประมาณตามระบบ Weight

Player ต้องผ่านทั้ง Slot Limit และ Weight Limit

㉚ ตั้ง Drop Slots

สามารถกำหนด

setr inventory:dropslots 50

และ

setr inventory:dropweight 30000

สำหรับ Inventory ที่ถูก Drop

ควรตั้งตาม Gameplay ไม่จำเป็นต้องเหมือน Player Inventory เสมอ

㉛ เปิด ox_target Integration

กำหนด

setr inventory:target true

เมื่อใช้ ox_target

จะช่วย Interaction กับ

Shops
Stashes
Crafting

บางส่วนผ่าน Target

ถ้าไม่ต้องการใช้

setr inventory:target false

ได้

㉜ ตั้ง Police Groups

Current Configuration รองรับ

setr inventory:police '["police", "sheriff"]'

สำหรับ Features ที่เกี่ยวข้อง เช่น Evidence/Armory ตาม Resource Configuration

ต้องตั้ง Group Names ให้ตรง Framework จริง

อย่าใส่ชื่อ Job ที่ไม่มีอยู่

㉝ Random Shop Prices เปิดได้

มี Convar

setr inventory:randomprices true

เพื่อให้ Shop Prices เปลี่ยนตาม Logic ของระบบ

สำหรับ Economy Server ควรคิดก่อนเปิด เพราะราคาผันผวนอาจกระทบ Balance

㉞ Logging ปรับได้

Current Source มี

inventory:loglevel

สำหรับ Logging Level

Production Server ควรมี Logging สำหรับ Actions สำคัญ แต่ไม่จำเป็นต้องเปิด Verbose Logging ทุกอย่างตลอดเวลาเพราะอาจสร้าง Log ปริมาณมาก

㉟ สร้าง Items ก่อนใช้งาน

Item ต้องถูก Define ก่อน

Current Item Definitions อยู่ใน

data/items.lua

ตัวอย่าง

['water'] = {
    label = 'Water',
    weight = 500,
    stack = true,
    close = true
}

หาก Script เรียก Item Name ที่ไม่มี Definition ระบบ Add/Use Item อาจไม่ทำงานตามต้องการ

㊱ Item Name กับ Label ต่างกัน

ตัวอย่าง

['water'] = {
    label = 'Water Bottle'
}

water คือ

Item Name

ส่วน

Water Bottle

คือข้อความที่ Player เห็น

Script ควรเรียก

water

ไม่ใช่ Label

㊲ Item Weight ต้องคิดเป็นกรัม

เช่น

weight = 500

หมายถึงประมาณ

0.5 kg

หากกำหนดผิด เช่น

weight = 50000

Item หนึ่งชิ้นอาจหนักถึง 50 kg

แล้ว Player Add Item ไม่ได้เพราะ Weight เต็ม

㊳ Item Stack ตั้งอย่างไร

Item ทั่วไป

stack = true

เช่น

Water
Food
Materials

Item Unique อาจใช้

stack = false

เช่น

ID Card
Weapon
Vehicle Key
Unique Document

โดยเฉพาะ Item ที่มี Metadata แตกต่างกันแต่ละชิ้น

㊴ Item Durability ตั้งได้

รองรับ

degrade
decay

สำหรับ Item ที่เสื่อมตามเวลา

เช่น

Food
Tools
Temporary Items

อย่าเปิดระบบเสื่อมโดยไม่คิด Economy เพราะอาจทำให้ผู้เล่นสูญเสีย Item เร็วเกินไป

㊵ Image Item อยู่ตรงไหน

Current Resource มี

web/images/

สำหรับ Images ของ Items

เมื่อสร้าง Custom Item ต้องเตรียม Image ตามชื่อ/Configuration ที่ UI ใช้

ถ้า Item ทำงานแต่รูปไม่ขึ้น ให้ตรวจ Image Path ก่อน Reinstall Inventory

㊶ Inventory Database Table ถูกสร้างอย่างไร

ox_inventory มี Database Logic สำหรับ Stashes และ Persistent Storage

เช่น Table

ox_inventory

ใช้เก็บ Data ของ Stash ตาม

owner
name
data

นอกจากนี้ Player/Vehicle Inventory Integration จะอ้าง Tables ของ Framework ตาม Bridge

㊷ Qbox ใช้ Player Table อะไร

Current MySQL Bridge สำหรับ Qbox อ้าง

players

และ Identifier Column

citizenid

สำหรับ Player Data

ส่วน Vehicle Integration อ้าง Qbox Vehicle Structure ตาม Current Bridge

จึงต้องใช้ Qbox Database Schema ที่ตรงกับ Version

㊸ ESX ใช้ Player Table อะไร

Current Bridge ใช้

users

กับ

identifier

ส่วน Vehicles ใช้แนวคิด

owned_vehicles
plate

ตาม Current ESX Integration

ดังนั้น Framework Setting ผิดจะทำให้ Inventory Query ผิด Tables

㊹ Framework Setting ผิดอันตรายอย่างไร

ถ้า Server เป็น Qbox แต่ตั้ง

setr inventory:framework "esx"

Inventory อาจพยายามใช้

users
identifier
owned_vehicles

แทน Qbox Schema

ผลคือ

Player Inventory ไม่โหลด
SQL Error
Trunk Error
Character Persistence ผิด

จึงต้องตั้ง Framework ให้ถูกตั้งแต่แรก

㊺ Custom Framework ใช้ได้ไหม

ได้ แต่ต้องสร้าง Bridge เอง

Documentation แนะนำ

setr inventory:framework "custom"

แล้ว Copy Bridge Template มาปรับ

ต้องกำหนดอย่างน้อย

Player Table
Player ID Column
Vehicle Table
Vehicle ID Column
Player Loaded Events
Groups

เหมาะกับ Developer ที่เข้าใจ Framework Internals จริง

㊻ อย่าใช้ Custom Bridge ถ้า Official Bridge มีอยู่แล้ว

ถ้าใช้ Qbox

ใช้ qbx bridge

ถ้าใช้ ESX

ใช้ esx bridge

ไม่ควรสร้าง Custom Bridge ใหม่โดยไม่มีเหตุผล เพราะเพิ่ม Code ที่ต้อง Maintenance

ใช้ Official Integration ก่อนเสมอ

㊼ ติดตั้ง ox_target ถ้าต้องการ Target

ox_target ต้องใช้ ox_lib

ดังนั้นลำดับ

ox_lib
↓
ox_target

และ Inventory เมื่อเปิด Target Integration จะเรียก Target สำหรับ Zones/Interactions

ทดสอบ Target แยกก่อนหาก Inventory Target ไม่ขึ้น

㊽ เปิด Server ครั้งแรกต้องดู Console

ตรวจตามลำดับ

oxmysql
↓
ox_lib
↓
Framework
↓
ox_target
↓
ox_inventory

ถ้า oxmysql Error ให้แก้ Database ก่อน

ถ้า ox_lib Error ให้แก้ Library

อย่าข้ามไปแก้ Inventory UI ก่อน Dependencies ผ่าน

㊾ Error ox_inventory requires ox_lib

ถ้าเจอ

ox_inventory requires the ox_lib resource

ให้ตรวจ

ox_lib มีไหม
Start หรือยัง
Version ถึงไหม
Folder ถูกไหม

Current Inventory จะไม่ Initialization ต่อถ้า lib ไม่มี

㊿ ox_lib Version ต่ำเกินไป

Current Source ตรวจขั้นต่ำ

3.36.4

ณ Snapshot ที่ตรวจสอบ

ถ้าเจอ Error ให้ Update ox_lib

อย่าลบ

lib.checkDependency

จาก Inventory Source

51. oxmysql Version ต่ำเกินไป

Current Source ตรวจขั้นต่ำ

2.7.3

ณ Snapshot ปัจจุบัน

หากต่ำกว่า ให้ Update oxmysql

และทดสอบ Database Connection หลัง Update

อย่ามองข้าม Database Backup

52. UI has not been built แก้อย่างไร

ถ้า Console แจ้ง

UI has not been built

ตรวจ

web/build/index.html

ถ้าไม่มี แปลว่า Package ยังไม่พร้อมใช้งาน

วิธีง่ายคือใช้ Official Release

หรือ Build Source ด้วย Workflow ของ Project

53. ox_target is not loaded

ถ้าตั้ง

setr inventory:target true

แต่ ox_target ไม่ Start ก่อน Inventory จะมี Warning

แก้ Start Order เป็น

ensure ox_target
ensure ox_inventory

และตรวจว่า ox_target ไม่มี Error ของตัวเอง

54. Inventory เปิดไม่ได้หลัง Start

หลัง Resource Started แล้วเข้า Server

ทดสอบ Player Inventory

ถ้าเปิดไม่ได้ให้ตรวจ

F8
Server Console
Framework Player Loaded
Inventory Bridge
NUI
Keybind

อย่า Clear Cache เป็นวิธีแรกหาก Console มี Error ชัดเจน

55. ทดสอบ AddItem

สร้าง Test ผ่าน Server-side Code หรือ Admin Tool ที่ปลอดภัย

แนวคิด

local success, response = exports.ox_inventory:AddItem(
    source,
    'water',
    1
)

จากนั้นตรวจ Return Value

ถ้าไม่สำเร็จให้ดู

Item มีไหม
Weight เต็มไหม
Slots เต็มไหม
Inventory พร้อมไหม

56. อย่า Ignore Return Value ของ AddItem

อย่าเขียน

exports.ox_inventory:AddItem(source, 'water', 100)

แล้วถือว่าสำเร็จเสมอ

ควรตรวจ

local success, response = exports.ox_inventory:AddItem(...)

เพื่อจัดการกรณี

inventory_full
invalid_item
invalid_inventory

หรือตาม Response ของ Current API

57. ทดสอบ RemoveItem

เช่นเดียวกัน

ทดสอบ

Add
↓
Remove
↓
Reconnect

เพื่อดูทั้ง Runtime State และ Persistence

Inventory ที่ Add ได้แต่ Save ไม่ได้ยังถือว่าติดตั้งไม่เสร็จ

58. ทดสอบ Stack และ Split

ลอง

Water x10
↓
Split
↓
Water x5 + Water x5
↓
Move Slot
↓
Stack กลับ

เพื่อพิสูจน์ Client UI และ Server Inventory State

ถ้ามี Desync ให้ตรวจ Console/F8 ทันที

59. ทดสอบ Metadata Item

สร้าง Item ที่มี Metadata

เช่น

ID Card
Name: Somchai
ID: ABC123

แล้ว

ย้าย Slot
Reconnect
Restart Server

ตรวจว่า Metadata ยังอยู่

นี่สำคัญสำหรับ Serious RP มากกว่า Item ทั่วไป

60. ทดสอบ Weapon

ถ้า Server ใช้ Weapons as Items

ทดสอบ

รับ Weapon
↓
Equip
↓
ยิง
↓
ตรวจ Ammo
↓
Unequip
↓
Reconnect

และดู

Serial
Durability
Ammo
Attachments

ว่าบันทึกถูก

ทดสอบ Stash หลังติดตั้ง

สร้างหรือใช้ Stash ที่มีอยู่

ทดสอบ

เปิด Stash
↓
ใส่ Item
↓
ปิด
↓
Reconnect
↓
เปิดใหม่

ถ้า Item หายให้ตรวจ

ox_inventory Table
Owner
Stash Name
Database Errors

ทดสอบ Personal Stash

ถ้า Stash เป็น Owner-based ให้ลองสอง Character

Character A
→ เก็บ Water

Character B
→ เปิด Stash ID เดียวกัน

ถ้าเป็น Personal Stash ที่ออกแบบถูก Character B ไม่ควรเห็น Inventory ของ Character A

ทดสอบ Shop

เปิด Shop แล้ว

ซื้อ Item
↓
เงินถูกหัก
↓
Item เข้า Inventory

ตรวจ

Price
Currency
Group
Grade
License

ตาม Shop Configuration

อย่าทดสอบแค่ UI เปิดได้

ทดสอบ ox_target กับ Shop/Stash

ถ้าเปิด

setr inventory:target true

ให้ตรวจ

Target NPC
Target Zone
Shop
Stash
Crafting

ถ้า Target ไม่แสดง แต่เปิด Inventory ด้วย Command/API ได้ แปลว่าปัญหาอาจอยู่ Target Layer ไม่ใช่ Inventory Core

ทดสอบ Trunk

ใช้รถที่มี Persistent Identity

เปิด Trunk
↓
ใส่ Item
↓
ปิด
↓
เก็บรถ
↓
เอารถออก
↓
เปิด Trunk

ตรวจว่า Item เดิมยังอยู่

และ Restart Server อีกครั้งเพื่อทดสอบ Persistence จริง

ทดสอบ Glovebox

ทำเหมือน Trunk

ใส่ Item
↓
ออกจากรถ
↓
Reconnect
↓
เปิด Glovebox

ถ้าข้อมูลหายให้ตรวจ Vehicle Bridge และ Vehicle Identifier ของ Framework

ไม่ควรแก้ Player Inventory ก่อน

ทดสอบ Crafting

ถ้าใช้ Crafting

ตรวจ

Ingredients
↓
Craft
↓
วัตถุดิบลด
↓
Output เพิ่ม

พร้อม

Duration
Metadata
Group Restriction
Grade

ตาม Recipe

Item Definitions ควร Backup

ไฟล์อย่าง

data/items.lua

เป็น Asset สำคัญมากสำหรับ Server

ควรเก็บใน Version Control

เมื่อ Paid Script เพิ่ม Item ให้จดว่า Resource ไหนเพิ่มอะไร

อย่าปล่อยให้ items.lua มีหลายร้อยรายการที่ไม่รู้ว่าใครใช้

Shops และ Stashes ก็ควร Version Control

ไฟล์ Configuration ที่เกี่ยวข้อง เช่น

data/shops.lua
data/stashes.lua

หรือ Custom Resources ที่ Register ระบบเหล่านี้ ควรเก็บ Version

ช่วยให้ Rollback ได้เมื่อ Update แล้ว Shop หรือ Stash หาย

อย่าแก้ ox_inventory Core เพื่อเพิ่ม Job Feature

ถ้าต้องการ Custom Logic เช่น

Police ห้ามใส่ Evidence ลง Trunk

ควรสร้าง Resource แยกและใช้

Hooks
Exports
APIs

แทนการแก้ Core Inventory

Current registerHook รองรับ Intercept Actions หลายแบบ

ใช้ Hook แทนแก้ Core

ตัวอย่าง Actions ที่ Hook ได้ เช่น

swapItems
openShop
createItem
buyItem
craftItem
usingItem

สามารถ Return false เพื่อ Block Actions บางชนิดตาม API

ทำให้ Update Inventory ง่ายขึ้นมาก

Migration ESX Inventory ต้องระวัง

ถ้า Existing ESX Server มี Player Inventory เดิม ต้องใช้ Conversion Workflow ที่ตรงกับ Current Integration

Current Inventory ยังมี Console Command

convertinventory

สำหรับ Conversion Scenarios ที่รองรับ

แต่ก่อนใช้ต้อง Backup Database

อย่ารัน Conversion หลายครั้งโดยไม่รู้ว่า Data ถูกเปลี่ยนไปแล้วหรือยัง

Qbox Server ใหม่ติดตั้งง่ายกว่า Migration

ถ้าเป็น Qbox Server ใหม่

Install Qbox
↓
ตั้ง inventory:framework qbx
↓
Start ox_inventory
↓
สร้าง Items
↓
Test

จะง่ายกว่า Existing Server ที่ต้อง Convert Inventory เก่า

นี่เป็นเหตุผลที่ควรตัดสินใจ Inventory ตั้งแต่เริ่มสร้าง Server

Production Server ต้องมี Test Environment

ก่อน Update

ox_inventory
ox_lib
oxmysql
Framework

ควรทดสอบใน Test Server

โดยใช้

Database Clone

ที่มี Player Inventory จริงบางส่วน

เพราะ Character ใหม่ที่มี Water 1 ขวดไม่สามารถจำลอง Metadata/Weapons/Stashes ของ Player เก่าได้ดีพอ

อย่า Update Dependencies ทุกตัวพร้อมกันแบบไม่รู้ Version

ถ้า Update

oxmysql
ox_lib
Framework
ox_inventory

พร้อมกันแล้ว Server พัง คุณจะไม่รู้ว่าตัวไหนเป็นต้นเหตุ

ควร

Backup
↓
อ่าน Dependency Requirements
↓
Update เป็นชุดที่ Compatible
↓
Test

และจด Version ไว้

Checklist ติดตั้ง ox_inventory

Files

  • ox_inventory Folder ถูก

  • fxmanifest.lua อยู่ Root

  • web/build/index.html มี

  • ใช้ Official Release

Dependencies

  • oxmysql ทำงาน

  • ox_lib ทำงาน

  • OneSync ผ่าน Requirement

  • FXServer ผ่าน Requirement

Framework

  • Framework รองรับ

  • inventory:framework ถูก

  • Framework Start ก่อน Inventory

Target

ถ้าใช้ Target

  • ox_target Start

  • inventory:target true

Configuration

  • Slots

  • Weight

  • Drop Slots

  • Drop Weight

  • Police Groups

  • Logging

ตั้งตามต้องการ

Items

  • Item Definitions ถูก

  • Images ครบ

  • Weight ถูก

  • Stack ถูก

  • Metadata Scripts ถูก

Testing

  • Player Inventory

  • AddItem

  • RemoveItem

  • Stack/Split

  • Metadata

  • Weapon

  • Shop

  • Stash

  • Trunk

  • Glovebox

  • Reconnect

  • Server Restart

ต้องผ่าน

วิธีติดตั้ง ox_inventory แบบสั้นที่สุด

① Backup Server ถ้ามีข้อมูลเดิม

② ตรวจ Framework ที่ใช้

③ Download Current ox_inventory Release

④ วาง Folder ชื่อ ox_inventory ใน resources

⑤ ตรวจ web/build/index.html

⑥ ติดตั้ง oxmysql

⑦ ติดตั้ง ox_lib

⑧ ติดตั้ง Framework

⑨ ติดตั้ง ox_target ถ้าจะใช้

⑩ ตั้ง inventory:framework

⑪ ตั้ง Slots / Weight

⑫ ตั้ง inventory:target

⑬ ตั้ง Police Groups/Config อื่น

⑭ Start oxmysql

⑮ Start ox_lib

⑯ Start Framework

⑰ Start ox_target

⑱ Start ox_inventory

⑲ ตรวจ Console

⑳ เข้า Server

㉑ เปิด Player Inventory

㉒ ทดสอบ Add/Remove Item

㉓ ทดสอบ Metadata

㉔ ทดสอบ Shop

㉕ ทดสอบ Stash

㉖ ทดสอบ Trunk/Glovebox

㉗ Reconnect

㉘ Restart Server

㉙ ตรวจ Persistence

㉚ Backup Working Base

ตัวอย่าง Qbox Config พร้อมใช้

setr inventory:framework "qbx"
setr inventory:slots 50
setr inventory:weight 30000
setr inventory:dropslots 50
setr inventory:dropweight 30000
setr inventory:target true
setr inventory:police '["police", "sheriff"]'

ensure oxmysql
ensure ox_lib
ensure qbx_core
ensure ox_target
ensure ox_inventory

จากนั้นจึง Start

Jobs
Phone
Housing
Police
Businesses

ที่รองรับ Stack นี้

ตัวอย่าง ESX Config

setr inventory:framework "esx"
setr inventory:slots 50
setr inventory:weight 30000
setr inventory:target true

ensure oxmysql
ensure ox_lib
ensure es_extended
ensure ox_target
ensure ox_inventory

แต่ Existing ESX Server ต้องตรวจ Inventory Migration และ Resource Compatibility ก่อนเสมอ

ปัญหาที่เจอบ่อยหลังติดตั้ง

ox_inventory requires the ox_lib resource

แก้ ox_lib ก่อน

Dependency Version Error

Update ox_lib หรือ oxmysql ให้ถึง Requirement

UI has not been built

ใช้ Release หรือ Build UI

ox_target not loaded

Start ox_target ก่อน Inventory หรือปิด Target Integration

Inventory เปิดไม่ได้

ตรวจ Framework Bridge + F8 + Console

Item ไม่มี

ตรวจ data/items.lua

Item เพิ่มไม่ได้

ตรวจ Weight/Slots/Item Definition

Item หายหลังเข้าใหม่

ตรวจ Persistence/Database/Framework Bridge

Trunk หาย

ตรวจ Vehicle Table/Identifier

Custom Script Error

ตรวจว่า Script รองรับ ox_inventory จริงหรือยังเรียก Inventory เก่าอยู่

อย่า Clear Cache เป็นคำตอบแรก

ถ้า Console บอก

Missing Dependency
Version Too Low
UI Build Missing
Wrong Framework
SQL Error

การ Clear Cache ไม่ได้แก้สาเหตุเหล่านี้

ควรแก้

Files
Version
Configuration
Database
Start Order

ตาม Error จริง

อย่ารัน Inventory สองตัวพร้อมกัน

ไม่ควรเปิด

qb-inventory
+
ox_inventory

หรือ Inventory Framework สองตัวพร้อมกันโดยไม่มี Integration ที่ออกแบบมาโดยเฉพาะ

เพราะอาจเกิด

Item State คนละชุด
Weapons คนละระบบ
Stash คนละระบบ
Database คนละชุด

เลือก Inventory Source of Truth เพียงระบบเดียว

สรุปวิธีติดตั้ง ox_inventory FiveM

การติดตั้ง ox_inventory ที่ถูกต้องต้องเริ่มจาก Dependency Stack ไม่ใช่เริ่มจาก UI

ลำดับที่ปลอดภัยคือ

Database
↓
oxmysql
↓
ox_lib
↓
Framework
↓
ox_target
↓
ox_inventory
↓
Custom Resources

Current ox_inventory รองรับ Framework หลักอย่าง ox_core, ESX, Qbox และ ND Core โดยกำหนดผ่าน

setr inventory:framework "..."

สำหรับ Qbox ใช้

setr inventory:framework "qbx"

และควร Start Inventory หลัง qbx_core

Current Resource ยังตรวจ Dependencies เช่น oxmysql และ ox_lib รวมถึงตรวจ UI Build ก่อน Initialization ดังนั้นถ้าเจอ Version หรือ Build Error วิธีที่ถูกคือแก้ Dependency/Package ให้ตรง ไม่ใช่ลบ Validation ออกจาก Source

สิ่งสำคัญที่สุดสำหรับ Existing Server คือ อย่ามอง ox_inventory เป็นเพียง UI กระเป๋าใหม่ เพราะมันเป็น Replacement ของ Item, Inventory และ Weapon Architecture ในหลาย Stack การเปลี่ยน Inventory จึงอาจกระทบ Jobs, Phone, Housing, Garage, Police, Shops และ Player Data จำนวนมาก

แนวทางของ comsiam คือสำหรับ Server ใหม่ควรติดตั้ง ox_inventory ตั้งแต่ Base และทดสอบ Player Inventory → Items → Metadata → Stash → Shop → Vehicle Storage → Reconnect ให้ผ่านก่อนเริ่มลง Paid Scripts

สำหรับ Production Server comsiam แนะนำให้ Clone Database ไป Test Server ก่อน Migration ทุกครั้ง โดยเฉพาะถ้ามี Weapons, Metadata Items, Stashes และ Vehicle Storage จำนวนมาก เพราะการเปิด Inventory UI ได้ไม่ใช่หลักฐานว่าการ Migration สมบูรณ์ ต้องพิสูจน์ Persistence หลัง Disconnect และ Server Restart ด้วย

Comments

Popular posts from this blog

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

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

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