วิธีติดตั้ง 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_inventoryFolder ถูกfxmanifest.luaอยู่ Rootweb/build/index.htmlมีใช้ Official Release
Dependencies
oxmysqlทำงานox_libทำงานOneSync ผ่าน Requirement
FXServer ผ่าน Requirement
Framework
Framework รองรับ
inventory:frameworkถูกFramework Start ก่อน Inventory
Target
ถ้าใช้ Target
ox_targetStartinventory: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
Post a Comment