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
oxmysqlox_libOneSync
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
Post a Comment