ox_inventory คืออะไร มีข้อดีอะไรบ้าง ทำไม FiveM Server นิยมใช้

ox_inventory คือ ระบบ Inventory แบบ Slot-based สำหรับ FiveM ที่รองรับ Item Metadata, Weight, Shops, Stashes, Crafting, Vehicle Storage, Weapons, Durability และ Framework Integration

พูดง่าย ๆ คือเป็นระบบที่จัดการว่า Player

ถือ Item อะไร
มีกี่ชิ้น
อยู่ Slot ไหน
หนักเท่าไร
Item มี Metadata อะไร
เก็บของไว้ที่ไหน
ใช้ Weapon อะไร

รวมถึงระบบ Inventory อื่น เช่น

Player Inventory
Stash
Shop
Crafting
Trunk
Glovebox
Container
Drop
Dumpster

Current ox_inventory เป็นหนึ่งใน Resources หลักของ OX Ecosystem และถูกใช้งานอย่างใกล้ชิดกับ Framework อย่าง Qbox และ ox_core

① ox_inventory คืออะไรแบบง่ายที่สุด

ลองนึกถึงกระเป๋าของ Player

Slot 1 → Water x5
Slot 2 → Phone
Slot 3 → Pistol
Slot 4 → ID Card
Slot 5 → Lockpick

แต่ละ Item ไม่ได้มีแค่

ชื่อ
+
จำนวน

เท่านั้น

ยังสามารถมี

Weight
Metadata
Durability
Description
Image
Stack
Custom Data

ทำให้ Inventory สามารถรองรับ RP Systems ที่ซับซ้อนได้

② ox_inventory เป็น Framework หรือไม่

ไม่ใช่

ox_inventory
≠ Framework

มันคือ Inventory Resource

Framework เช่น

ESX
Qbox
ox_core
ND Core

ทำหน้าที่เกี่ยวกับ Player และ Character Data

ส่วน ox_inventory ดูแล Items และ Inventories

Architecture จึงเป็น

Framework
↓
Player Identity / Groups
↓
ox_inventory
↓
Items / Stashes / Shops / Weapons

③ ox_inventory ต่างจาก ox_lib อย่างไร

ox_inventory

Inventory System

ox_lib

Library
UI
Callbacks
Zones
Utilities

ox_inventory เองต้องใช้ ox_lib เป็น Dependency

ดังนั้นโดยทั่วไปจะมี

ox_lib
↓
ox_inventory

แต่ทั้งสองไม่ใช่ Resource เดียวกัน

④ ox_inventory ต่างจาก oxmysql อย่างไร

oxmysql ทำหน้าที่

FiveM
↓
Database

ส่วน ox_inventory ทำหน้าที่

Player
↓
Items
↓
Inventory

ox_inventory ใช้ oxmysql เพื่อบันทึกข้อมูล Persistent ลง Database

ดังนั้น

oxmysql
≠ Inventory

แต่เป็น Database Layer ที่ Inventory ใช้งาน

⑤ Dependencies หลักของ ox_inventory

Current Resource ต้องใช้

oxmysql
ox_lib
OneSync

และมี FXServer Build Requirement ตาม Manifest ของ Release

ox_target เป็น Optional Dependency สำหรับ Target Integration

ดังนั้น Stack โดยทั่วไปคือ

oxmysql
↓
ox_lib
↓
Framework
↓
ox_target
↓
ox_inventory

⑥ Current ox_inventory Version

Current fxmanifest.lua ที่ตรวจสอบสำหรับบทความนี้ระบุ Version

2.47.9

อย่างไรก็ตาม Version สามารถเปลี่ยนได้

จึงควรยึด

Current Release
+
Minimum Dependency Requirements

ของวันที่ติดตั้งจริงเป็นหลัก

ไม่ควรจำ Version นี้เป็นค่าถาวร

⑦ ox_inventory เป็น Slot-based Inventory

จุดเด่นพื้นฐานคือระบบ

Slot

แต่ละ Item อยู่ใน Slot ของ Inventory

เช่น

Slot 1
Water x10

Slot 2
Phone

Slot 3
Weapon

Slot 4
ID Card

ต่างจาก Inventory แบบง่ายที่เก็บเพียงชื่อและจำนวนรวมของ Item

⑧ Slot มีประโยชน์อย่างไร

เพราะ Item ชื่อเดียวกันสามารถแยกกันได้

สมมติมี

Pistol A
Pistol B

ทั้งคู่เป็น

WEAPON_PISTOL

แต่ Pistol A อาจมี

Serial = ABC100
Durability = 98

ส่วน Pistol B

Serial = XYZ500
Durability = 22

Slot-based Inventory จึงรองรับ Item Unique ได้ดี

⑨ Metadata คืออะไร

Metadata คือข้อมูลเพิ่มเติมที่ติดอยู่กับ Item แต่ละชิ้น

ตัวอย่าง ID Card

Item:
id_card

Metadata:
name = Somchai
birthdate = 1995-01-01
citizenid = ABC123

หรือ Weapon

Serial
Ammo
Durability
Attachments
Registered Owner

ทำให้ Item ชื่อเดียวกันมีคุณสมบัติแตกต่างกันได้

⑩ Metadata มีประโยชน์กับ RP อย่างไร

สามารถสร้าง Item เช่น

บัตรประชาชน
ใบขับขี่
ใบอนุญาตอาวุธ
กุญแจรถ
โทรศัพท์
ใบเสร็จ
เอกสาร
อาวุธ

โดย Item แต่ละชิ้นมีข้อมูลของตัวเอง

ตัวอย่างกุญแจรถ

Item:
vehicle_key

Metadata:
plate = ABC123
vehicleId = 918

นี่เพิ่มความสมจริงให้ Serious RP ได้มาก

⑪ Metadata สามารถแสดงใน Tooltip ได้

Current Client API มี

exports.ox_inventory:displayMetadata(...)

สำหรับกำหนด Metadata ที่จะแสดงใน Tooltip

เช่น

Serial Number
Owner
Quality
Expiration

ทำให้ Player เห็นข้อมูล Item ได้โดยไม่ต้องเปิด UI เพิ่ม

⑫ Item Weight คืออะไร

แต่ละ Item สามารถกำหนด Weight

ตัวอย่าง

water = {
    label = 'Water',
    weight = 500
}

แล้ว Player Inventory มี Carry Capacity สูงสุด

Current Default Configuration แสดงตัวอย่าง

30,000 grams

หรือประมาณ

30 kg

แต่ Server สามารถปรับค่าได้

⑬ Player Slots ปรับได้ไหม

ได้

Current Config ใช้ Convar

setr inventory:slots 50

เป็น Default Example

ดังนั้น Server สามารถกำหนดจำนวน Slots ตาม Economy Design

เช่น

40 Slots
50 Slots
60 Slots

แต่อย่าปรับสูงมากโดยไม่มีเหตุผลเพียงเพราะต้องการให้ Player ถือของเยอะ

⑭ Weight กับ Slots ทำงานร่วมกัน

Player อาจมี

50 Slots

แต่ไม่ได้หมายความว่าสามารถใส่ของหนักเท่าไรก็ได้

ระบบต้องตรวจทั้ง

Slots
+
Weight

ตัวอย่าง

ยังเหลือ 20 Slots
แต่ Weight เต็มแล้ว

ก็ไม่สามารถเพิ่ม Item ที่หนักเกิน Capacity ได้

⑮ Item สามารถ Stack ได้ไหม

ได้

Item Definition มีตัวเลือก

stack = true

หรือ

stack = false

ตัวอย่าง

Water x10

สามารถ Stack ได้

แต่ Item Unique เช่น

ID Card
Weapon
Vehicle Key

อาจตั้งไม่ให้ Stack เพื่อรักษา Metadata แยกแต่ละชิ้น

⑯ Item มี Durability ได้

Current Item System รองรับ

durability
degrade
decay

จึงสร้าง Item ที่เสื่อมสภาพได้

ตัวอย่าง

Lockpick
100%
↓
ใช้หลายครั้ง
↓
40%
↓
0%
↓
เสีย/ถูกลบ

ขึ้นอยู่กับ Configuration ของ Item

⑰ Item สามารถหมดอายุได้

สามารถออกแบบ Item ให้ Degrade ตามเวลา

เหมาะกับ

อาหาร
ยา
เครื่องมือ
บัตรชั่วคราว
Resource RP เฉพาะทาง

เช่นอาหารอาจมี Durability ลดลงเรื่อย ๆ

ทำให้ Economy มี Item Sink เพิ่มขึ้น

⑱ ox_inventory จัดการ Weapons ด้วยหรือไม่

ใช่

Current Project มีแนวคิด Weapons as Items

Weapon จึงอยู่ใน Inventory และมี Metadata ของตัวเอง

เช่น

Weapon
├── Ammo
├── Serial
├── Durability
├── Components
└── Registered Owner

นี่แตกต่างจาก Inventory บางระบบที่ Weapon ถูกแยกออกจาก Item System

⑲ Serial Number ของ Weapon มีประโยชน์อย่างไร

Serious RP สามารถใช้

Weapon Serial

กับ Gameplay เช่น

Police Evidence
Weapon Registration
Gun Store
Crime Investigation
Illegal Weapons

เช่นตำรวจยึดปืนแล้วตรวจ Serial เพื่อหาผู้ซื้อเดิม

ระบบแบบนี้ทำได้ง่ายขึ้นเมื่อ Weapon เป็น Metadata Item

⑳ Weapon Attachments รองรับไหม

รองรับ

Current Project ระบุรองรับ

Weapon Attachments
Ammo
Special Ammo Types

จึงสามารถเชื่อมระบบ

Suppressor
Flashlight
Scope
Magazine

เข้ากับ Weapon Item ได้

㉑ Weapon Durability รองรับไหม

รองรับเช่นกัน

Weapon สามารถมี

Durability

ที่ลดตามการใช้งาน

จากนั้น Server สามารถออกแบบ

Repair
Maintenance
Replacement

เป็นส่วนหนึ่งของ Economy

㉒ Player Inventory เปิดด้วย API ได้

Current Client API มี

exports.ox_inventory:openInventory(...)

โดยรองรับ Inventory Types หลายแบบ

เช่น

player
shop
stash
crafting
container
drop
glovebox
trunk
dumpster

ทำให้ Custom Scripts เปิด Inventory Interface แบบเดียวกันได้

㉓ Stash คืออะไร

Stash คือพื้นที่เก็บของที่ไม่ใช่ Player Inventory

ตัวอย่าง

Police Armory
Hospital Storage
House Storage
Business Warehouse
Personal Locker
Gang Stash

สามารถกำหนด

Slots
Weight
Owner
Groups
Coordinates

ตามระบบที่สร้าง

㉔ Personal Stash ทำได้หรือไม่

ได้

Current ox_inventory รองรับ Personal Stashes

ตัวอย่าง

motel_room_10

แต่แยก Owner ตาม Character

ดังนั้น Player A กับ Player B สามารถใช้ Stash ID เดียวในเชิง Resource แต่เห็นข้อมูลคนละชุดตาม Owner

เหมาะกับ

Hotel
Apartment
Personal Locker
House

㉕ Group-restricted Stash ทำได้

Stash สามารถจำกัดตาม Groups ได้

ตัวอย่าง

Police Evidence
→ police เท่านั้น

หรือ

EMS Storage
→ ambulance เท่านั้น

และสามารถกำหนด Grade Requirement ตาม Integration ได้

ทำให้ Permission ไม่ต้อง Hardcode Client-side อย่างเดียว

㉖ Vehicle Trunk รองรับไหม

รองรับ

Inventory Type มี

trunk

สำหรับท้ายรถ

ทำให้รถแต่ละคันสามารถมี Storage ของตัวเอง

ตัวอย่าง

Vehicle
↓
Plate / Vehicle Identity
↓
Trunk Inventory

เหมาะกับ

Personal Cars
Police Cars
Delivery Vehicles
Business Vehicles

㉗ Glovebox รองรับไหม

รองรับ

Inventory Type มี

glovebox

สำหรับช่องเก็บของในรถ

จึงสามารถแยก

Glovebox

จาก

Trunk

ได้

ทำให้ Vehicle Inventory สมจริงกว่า Storage เดียว

㉘ Dumpster Loot รองรับไหม

Current Project รองรับ Random Item Generation ใน

Dumpsters
Unowned Vehicles

และสามารถกำหนด Loot ผ่าน Convars

เช่น

water
garbage
money
bandage

พร้อม Chance/Amount ตาม Configuration

เหมาะกับ Survival/Economy RP บางรูปแบบ

㉙ Drop Inventory คืออะไร

เมื่อ Item ถูก Drop ลงพื้น สามารถเกิด Inventory ประเภท

drop

ให้ Player อื่นเข้าถึงได้

ระบบจึงรองรับ Gameplay อย่าง

ทิ้งของ
ส่งของ
เก็บของจากพื้น
Crime Evidence

ตาม Logic ของ Server

㉚ Container Item คืออะไร

Current ox_inventory รองรับ Container ที่เปิด Stash ผ่าน Item

ตัวอย่าง

Backpack
Paper Bag
Case
Box

Player ใช้ Item

Backpack
↓
เปิด Container Inventory

จึงสามารถทำ Bag-within-inventory Mechanics ได้ตาม Configuration/Resource Design

㉛ Shops มีในตัวหรือไม่

มี Shop System

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

Items
Prices
Locations
Groups
Grades
Licenses
Currency

ได้

ตัวอย่าง

General Store
Gun Store
Police Armory
Medical Store
Black Market

㉜ Shop จำกัดตาม Job ได้ไหม

ได้

Current Shop System รองรับ Group Restrictions

เช่น

Police Armory
→ police

หรือกำหนด Grade

Police Grade >= 2

เพื่อซื้อ Item บางรายการ

ทำให้ Shop Access เชื่อมกับ Framework Group Data ได้

㉝ Shop จำกัดตาม License ได้ไหม

ได้

Current Project ระบุว่ารองรับ License Restrictions

ตัวอย่าง

Weapon Shop
↓
ต้องมี Weapon License

นี่เหมาะกับ RP Server ที่มีระบบใบอนุญาต

㉞ Shop ใช้สกุลเงินอื่นได้ไหม

ได้

Current Shop Features รองรับ Currency อื่นสำหรับ Item

ตัวอย่าง

money
black_money
poker_chips

ตาม Account/Item Integration ของ Server

จึงสามารถสร้าง Shop หลาย Economy Layer ได้

㉟ ราคาสุ่มได้ไหม

Current Config มี

inventory:randomprices

สำหรับให้ราคาสินค้าใน Shops ผันผวน

ถ้าเปิด

true

ราคาสามารถสุ่มในช่วงที่ระบบกำหนด

เหมาะกับ Server ที่ต้องการ Price Variation

แต่ควรระวังผลต่อ Economy Balance

㊱ Crafting มีในตัวหรือไม่

มี

Current ox_inventory มี Crafting System

สามารถกำหนด

Recipe
Ingredients
Duration
Output Count
Metadata
Location
Groups

ตัวอย่าง

3 Scrap
+
1 Tool
↓
Craft 1 Lockpick

㊲ Crafting จำกัดตาม Job ได้ไหม

ได้

Current Crafting Definition รองรับ Groups/Minimum Grade

เช่น

groups = {
    police = 0,
    ambulance = 2
}

จึงสามารถทำ Crafting Bench เฉพาะอาชีพได้

㊳ Crafting ใช้ Durability ของวัตถุดิบได้ไหม

ได้

Current Documentation รองรับ Ingredient Value ที่น้อยกว่า 1 เพื่อใช้เป็น Durability Consumption

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

Hammer
ไม่ถูกลบ
แต่ลด Durability 10%

แทนการ Consume Item ทั้งชิ้น

ช่วยสร้าง Crafting ที่สมจริงขึ้น

㊴ Crafting Output มี Metadata ได้

สามารถกำหนด Metadata ให้ Item ที่ Craft ได้

ตัวอย่าง

Craft Weapon
↓
Serial
Quality
Durability
Crafter

ตาม Resource Logic

ทำให้ Crafting และ Metadata System ทำงานร่วมกันได้

㊵ ox_inventory ใช้ ox_target ได้ไหม

ได้

ox_target เป็น Optional Dependency

เมื่อเปิด Target Integration สามารถใช้

Target Zone
↓
Shop
Stash
Crafting

แทน Marker/Key Interaction บางรูปแบบ

ตัวอย่าง

มองตู้เก็บของ
↓
Target
↓
เปิด Stash

㊶ ox_inventory ใช้กับ Qbox ได้ไหม

ได้ และเป็นหนึ่งใน Stack หลักที่พบมาก

Configuration คือ

setr inventory:framework "qbx"

Current Qbox integration documentation ยังระบุให้ Start ox_inventory หลัง qbx_core

ดังนั้น Stack ประมาณ

oxmysql
↓
ox_lib
↓
qbx_core
↓
ox_target
↓
ox_inventory

㊷ ox_inventory ใช้กับ ESX ได้ไหม

ได้

Current Supported Frameworks มี

ESX

และสามารถกำหนด

setr inventory:framework "esx"

ได้

แต่ถ้ากำลังแทน Built-in/Existing ESX Inventory ต้องตรวจ Compatibility ของ Scripts เดิมด้วย

㊸ ox_inventory ใช้กับ ox_core ได้ไหม

ได้

ox_inventory เป็น Optional Dependency ที่แนะนำสำหรับ ox_core

Framework สามารถจัดการ

Player / Character

ขณะที่ Inventory จัดการ

Items
Slots
Stashes
Weapons

ทำให้ Responsibility แยกกันชัด

㊹ ใช้กับ QBCore ได้โดยตรงไหม

Current Official README ที่ตรวจสอบระบุ Supported Frameworks เป็น

ox_core
ESX
Qbox
ND Core

และไม่ได้ระบุ QBCore เป็น Official Supported Framework ในรายการปัจจุบัน

ดังนั้นถ้าใช้ qb-core โดยตรง อย่าคิดว่าเพียงตั้ง

inventory:framework "qb"

แล้วจะเป็น Official Native Integration

ต้องตรวจ Bridge หรือ Migration Strategy ที่ใช้อยู่จริง

ถ้ากำลังพิจารณา Qbox ควรใช้ Qbox Integration ตาม Official Documentation แทน

㊺ เปลี่ยน qb-inventory เป็น ox_inventory ง่ายไหม

ไม่ควรถือว่าง่าย

Inventory เป็นระบบที่ Scripts จำนวนมากเรียกใช้

เช่น

Jobs
Shops
Crafting
Housing
Phone
Garage
Police
EMS
Businesses

ถ้า Resources เดิมเรียก

qb-inventory exports

โดยตรง การเปลี่ยน Inventory อาจทำให้ Resource เหล่านั้น Error

ต้อง Audit ก่อน Migration

㊻ Official Documentation เตือนเรื่อง Compatibility

Current ox_inventory Documentation ระบุชัดว่า ถ้ากำลังแทน Built-in Framework Inventory อาจเกิด Compatibility Errors

และถ้าไม่พร้อมแก้ Integration Problems ไม่ควรติดตั้งเพื่อ Replace ระบบเดิมโดยไม่วางแผน

นี่เป็นคำเตือนที่ Server Owner ควรให้ความสำคัญ

㊼ Server-side Security เป็นจุดเด่น

Current Project ระบุว่า Interactions สำคัญกับ

Items
Shops
Stashes

มี Server-side Validation

นี่สำคัญเพราะ Inventory เกี่ยวข้องกับ Economy โดยตรง

ถ้า Client สามารถสร้าง Item เองได้ง่าย Server Economy จะเสียทันที

㊽ Server-side Validation หมายความว่าโกงไม่ได้เลยไหม

ไม่

ไม่มี Inventory Resource ใดรับประกันว่า Custom Script ของคุณปลอดภัยทั้งหมด

สมมติ Custom Job ทำ

Client
→ ขอ AddItem diamond x1000

และ Server Custom Code เชื่อข้อมูล Client โดยไม่ตรวจ

ช่องโหว่ยังเกิดได้

ดังนั้น Custom Resources ต้อง Validate

Player
Position
Job
State
Cooldown
Reward
Amount

บน Server ด้วย

㊾ Logging มีหรือไม่

Current Project รองรับ Logging สำหรับ Event สำคัญ เช่น

Purchases
Item Movement
Item Creation
Item Removal

และมี Config

inventory:loglevel

สำหรับระดับ Logging

ช่วย Audit Economy และ Debug ปัญหา Item ได้

㊿ Hooks คืออะไร

ox_inventory มี Server Hooks

Resource อื่นสามารถใช้

exports.ox_inventory:registerHook(...)

เพื่อ Intercept/Validate Actions

เช่น

swapItems
openShop
createItem
buyItem
craftItem
usingItem

โดยไม่ต้องแก้ Source ของ Inventory โดยตรง

51. Hooks มีประโยชน์อย่างไร

สมมติไม่ต้องการให้ Player ย้าย Item บางชนิดเข้า Vehicle Trunk

สามารถสร้าง Custom Resource

my_inventory_rules
↓
registerHook
↓
ตรวจ Item + Inventory
↓
อนุญาต / ปฏิเสธ

แทนการเข้าไปแก้ ox_inventory Core

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

52. Hook สามารถ Block การซื้อของได้ไหม

ได้

ตัวอย่าง Hook

buyItem

สามารถตรวจ

Player
Shop
Item
Price
Currency

และ Return false เพื่อปฏิเสธ Transaction ตาม Use Case

เหมาะกับ

Custom License
Event Restriction
Business Rule
Anti-abuse

53. Hook สามารถแก้ Metadata ตอนสร้าง Item ได้

Current

createItem

Hook สามารถแก้ Metadata ของ Item ตอนสร้าง

ตัวอย่าง

Weapon
↓
สร้าง Serial
↓
เพิ่ม Registered Owner

หรือ

ID Card
↓
ใส่ Character Name

โดยไม่ต้องแก้ Inventory Core

54. Inventory Sync หลายคนได้หรือไม่

Current Project ระบุว่า Inventory ถูก Synchronise เพื่อให้หลาย Player เข้าถึง Inventory เดียวกันได้อย่างถูกต้อง

นี่สำคัญกับ

Shared Stash
Vehicle Storage
Evidence
Business Storage

เพราะต้องป้องกัน Player สองคนเห็น State คนละชุดในเวลาเดียวกัน

55. ox_inventory มีข้อดีอะไรบ้าง

ข้อดีหลัก ได้แก่

Slot-based

จัด Item เป็นราย Slot

Metadata

สร้าง Item Unique ได้

Weight

ควบคุม Carry Capacity

Durability

รองรับ Item เสื่อมสภาพ

Weapons as Items

Weapon อยู่ใน Inventory System เดียวกัน

Shops

มี Shop System

Stashes

รองรับ Personal/Group Storage

Crafting

มี Crafting Integration

Vehicles

รองรับ Trunk/Glovebox

Hooks

Custom Behavior โดยไม่แก้ Core

Server Validation

ช่วยให้ Economy Architecture ปลอดภัยขึ้น

Framework Integration

รองรับ Framework หลักหลายตัว

56. ข้อดีสำหรับ Developer

Developer ไม่ต้องสร้าง Inventory APIs ใหม่ทุก Script

มี Exports สำหรับ

OpenInventory
AddItem
RemoveItem
Search
GetItem
RegisterStash

และ Functionality อื่นตาม Current API

Architecture จึงเป็น

Custom Job
↓
ox_inventory API
↓
Inventory

แทน

Custom Job
↓
แก้ Inventory Database เอง

57. ข้อดีสำหรับ Server Owner

เมื่อ Resources ใช้ Inventory API กลาง

การจัดการ

Items
Weapons
Stashes
Shops
Crafting

มี Source of Truth เดียวมากขึ้น

ช่วยลดปัญหา

Script A คิดว่ามี 5 Item
Script B คิดว่ามี 8 Item
Database มี 6 Item

ซึ่งเกิดได้หากแต่ละ Scriptจัด Inventory เอง

58. ข้อเสียหรือสิ่งที่ต้องระวัง

ox_inventory ไม่ได้เหมาะกับทุก Server โดยอัตโนมัติ

ข้อควรระวัง ได้แก่

Migration Compatibility
Framework Support
Script Support
Version Dependencies
Item Conversion
Weapon Conversion
Stash Conversion
Custom APIs

โดยเฉพาะ Existing Production Server ที่ใช้ Inventory อื่นมานาน

59. ox_inventory เหมาะกับ Server แบบไหน

เหมาะมากกับ

Serious RP
Economy RP
Qbox Server
ox_core Server
ESX Server ที่ใช้ Integration ที่รองรับ
Custom RP
Server ที่ต้องการ Metadata Items
Server ที่ต้องการ Weapon Persistence

โดยเฉพาะ Server ใหม่ที่สามารถออกแบบ Resource Stack รอบ Inventory ตั้งแต่ต้น

60. Server แบบไหนควรคิดก่อนเปลี่ยน

ควรคิดให้มากถ้า

มี Inventory เดิมใช้งานดี
มี Paid Scripts จำนวนมาก
Scripts ผูก API ของ Inventory เดิม
Production Data เยอะ
ไม่มี Developer ทำ Migration

การเปลี่ยน Inventory อาจกลายเป็น Project ใหญ่กว่าการเปลี่ยน Script ธรรมดาหลายเท่า

Current Config สำคัญอะไรบ้าง

ตัวอย่าง Current Configuration มี

setr inventory:framework "qbx"
setr inventory:slots 50
setr inventory:weight 30000

พร้อม Config อื่น เช่น

Target Integration
Police Groups
Random Prices
Random Loot
Stash Cleanup
Logging
Vehicle Loot
Dumpster Loot
Accounts
Markers

ควรตั้งผ่าน Convars

ไม่ควรแก้

ox_inventory/init.lua

เป็น Config File เพราะ Current Source ระบุชัดว่าไม่ควรทำ

inventory:framework สำคัญมาก

ต้องตรงกับ Framework ที่รองรับ

ตัวอย่าง Qbox

setr inventory:framework "qbx"

ESX

setr inventory:framework "esx"

ถ้าตั้ง Framework ผิด Inventory Bridge อาจโหลดผิดชุด

และ Player Data/Groups อาจไม่ทำงานตามต้องการ

Start Order ที่แนะนำ

Current Documentation ใช้แนวคิด

start oxmysql
start ox_lib
start framework
start ox_target
start ox_inventory

ตัวอย่าง Qbox

ensure oxmysql
ensure ox_lib
ensure qbx_core
ensure ox_target
ensure ox_inventory

ต้องให้ Dependencies พร้อมก่อน Inventory

ox_inventory Start แล้วหมายความว่าใช้ได้หรือยัง

ยังไม่พอ

ต้องทดสอบ

Player Inventory
Add Item
Remove Item
Metadata
Weapon
Stash
Shop
Trunk
Glovebox
Reconnect
Server Restart

ด้วย

เพราะ Resource อาจ Started แต่ Framework Bridge หรือ Database Integration มีปัญหาได้

วิธีทดสอบ ox_inventory หลังติดตั้ง

ทำตามลำดับ

① เข้า Server

② เปิด Player Inventory

③ เพิ่ม Water

④ ย้าย Slot

⑤ Stack / Split Item

⑥ ใช้ Item

⑦ ตรวจ Weight

⑧ เปิด Stash

⑨ เปิด Shop

⑩ ซื้อ Item

⑪ ทดสอบ Trunk

⑫ ทดสอบ Glovebox

⑬ ทดสอบ Weapon

⑭ Disconnect

⑮ Reconnect

⑯ ตรวจ Items เดิม

⑰ Restart Server

⑱ ตรวจ Persistence อีกครั้ง

เมื่อผ่านจึงค่อยต่อ Custom Jobs และ Paid Scripts

ถ้า Inventory เปิดได้แต่ Item หายหลัง Reconnect

ให้ตรวจ

Database
Player Identifier
Framework Bridge
Save Logic
Server Console

อย่าสรุปว่า UI พัง

เพราะ UI เปิดได้แสดงว่า Client Layer ส่วนหนึ่งทำงานแล้ว

ปัญหาอาจอยู่ Persistence

ถ้า Item Add ไม่ได้

ตรวจผลจาก Export

ตัวอย่าง Server Code สามารถใช้

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

จากนั้นควรตรวจ

Item Defined?
Inventory มี Slot?
Weight เต็ม?
Metadata ถูก?
Player Inventory พร้อม?

อย่า Ignore Return Value จาก Inventory API

Item ต้อง Defined ก่อน

Current Item Definitions อยู่ที่

data/items.lua

Item หนึ่งสามารถกำหนด

label
weight
stack
degrade
decay
close
description

และ Options อื่น

ถ้า Custom Script Add Item ชื่อที่ไม่มี Definition Inventory ย่อมมีปัญหา

อย่าแก้ Database Inventory โดยตรง

ไม่ควรทำ

UPDATE players
SET inventory = ...

ขณะ Player Online เพื่อหวังว่า Inventory จะ Update

ควรใช้

ox_inventory exports

เพราะ Runtime Inventory State อาจไม่ตรงกับ Database หลัง Direct Query

ให้ Inventory เป็น Source of Truth สำหรับ Item State

อย่าให้ Client AddItem เอง

ระบบ Reward ควรเป็น

Client
↓
Request Action
↓
Server ตรวจสอบ
↓
ox_inventory:AddItem

ไม่ใช่

Client
↓
กำหนด Item/Amount เอง
↓
Server เพิ่มให้ทันที

Inventory ที่มี Server-side Security ไม่สามารถป้องกัน Custom Server Event ที่เขียนไม่ปลอดภัยได้ทั้งหมด

ox_inventory v3 คืออะไร

ปัจจุบันยังมี Repository

ox_inventory_v3

ซึ่งเป็น Rewrite ด้วย TypeScript/Svelte

แต่ Repository ระบุชัดว่า

For testing purposes only

ดังนั้นสำหรับ Production ไม่ควรเห็นคำว่า v3 แล้วรีบ Migration โดยคิดว่าเป็น Replacement Stable โดยอัตโนมัติ

ควรยึด Current Production Documentation/Release ที่โครงการแนะนำ

อย่าเปลี่ยนไป v3 เพราะเลขสูงกว่า

คำว่า

v3

ไม่ได้หมายความว่า Server Production ควรใช้ทันที

ต้องดู Project Status ก่อน

ใน Current Repository ระบุว่าเป็น

testing purposes only

ดังนั้น Server จริงควรรอ Stable Guidance ของ Project ก่อน Migration

Checklist ก่อนเลือก ox_inventory

Framework

ต้องรู้ว่าจะใช้

ox_core
ESX
Qbox
ND Core

หรือ Integration อื่นอย่างไร

Dependencies

  • oxmysql

  • ox_lib

  • OneSync

  • FXServer ที่ผ่าน Requirement

Inventory Design

  • Slots

  • Weight

  • Items

  • Metadata

  • Weapons

  • Shops

  • Stashes

  • Crafting

Existing Scripts

ตรวจ

Phone
Housing
Police
EMS
Jobs
Garage
Businesses

ว่ารองรับ Inventory หรือไม่

Production

  • Database Backup

  • Inventory Backup

  • Test Server

  • Migration Plan

  • Rollback Plan

ox_inventory เหมาะกับ Server ใหม่ไหม

เหมาะมากถ้า Scripts หลักรองรับ

Server ใหม่สามารถเริ่ม

Framework
↓
ox_inventory
↓
Jobs / Phone / Housing

ตั้งแต่แรก

จึงไม่ต้อง Migration Player Items และ Stashes จาก Inventory รุ่นเก่า

นี่เป็นสถานการณ์ที่ติดตั้งง่ายที่สุด

ox_inventory เหมาะกับ Qbox ไหม

เหมาะมาก

Qbox Current Stack ผูกกับ ox_inventory อย่างใกล้ชิด

และ Current Qbox Core ยังตรวจ Inventory Framework Configuration

ดังนั้น Server ใหม่ที่เลือก Qbox ควรวาง

ox_inventory

เป็นส่วนหนึ่งของ Core Stack ตั้งแต่ต้น

มากกว่าติดตั้ง Inventory คนละระบบโดยไม่ตรวจ Integration

ox_inventory เหมาะกับ ESX ไหม

เหมาะได้

Current Official Project รองรับ ESX

แต่ Existing ESX Server ต้องตรวจ Resources เดิมก่อน

เพราะ Script ESX รุ่นเก่าบางตัวอาจอ้าง Built-in Inventory Functions โดยตรง

ดังนั้น

ESX ใหม่
→ ติดตั้งง่ายกว่า

ESX Production เก่า
→ ต้อง Audit ก่อน

สรุป ox_inventory คืออะไร มีข้อดีอะไรบ้าง

ox_inventory คือ ระบบ Inventory แบบ Slot-based สำหรับ FiveM ที่รองรับ Item Metadata และระบบ RP ขนาดใหญ่ครบใน Resource เดียว

จุดเด่นสำคัญ ได้แก่

Slot-based Inventory
Weight
Metadata
Unique Items
Durability
Weapons as Items
Weapon Serial
Attachments
Ammo
Shops
Stashes
Crafting
Containers
Trunks
Gloveboxes
Drops
Hooks
Logging
Server-side Validation

Current Project รองรับ Framework อย่าง

ox_core
ESX
Qbox
ND Core

และต้องใช้ oxmysql, ox_lib รวมถึง OneSync ตาม Current Manifest ขณะที่ ox_target สามารถเพิ่ม Interaction Layer ได้

ข้อดีที่สำคัญที่สุดของ ox_inventory สำหรับ Serious RP คือ Metadata เพราะทำให้ Item ชื่อเดียวกันไม่จำเป็นต้องเหมือนกันทุกชิ้น เช่น Weapon แต่ละกระบอกมี Serial/Durability ต่างกัน หรือ ID Card แต่ละใบมี Character Data ของเจ้าของเอง

อีกข้อดีคือระบบ

Shops
Stashes
Crafting
Vehicle Storage
Weapons

ถูกออกแบบให้อยู่ภายใต้ Inventory Architecture เดียวกัน ทำให้ Custom Scripts สามารถใช้ Public APIs และ Hooks แทนการแก้ Source ของ Inventory โดยตรง

แนวทางของ comsiam คือถ้าสร้าง Server ใหม่ที่ใช้ Qbox หรือ OX-first Stack ox_inventory เป็นตัวเลือกที่ควรพิจารณาตั้งแต่วันแรก เพราะการเปลี่ยน Inventory หลังมี Player Data, Stashes, Weapons และ Paid Scripts จำนวนมากแล้วจะซับซ้อนกว่ามาก

แต่ถ้า comsiam ต้องดู Existing Production Server ที่ Inventory เดิมทำงานดีอยู่แล้ว จะไม่เปลี่ยนเพียงเพราะ ox_inventory มี Feature เยอะกว่า ควร Audit Phone, Housing, Jobs, Police, Garage และ Custom Scripts ก่อน เพราะ Official Documentation เองก็เตือนว่าการ Replace Framework Inventory สามารถทำให้เกิด Compatibility Errors ได้

Comments

Popular posts from this blog

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

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

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