FiveM เสื้อผ้าหายหรือลำดับเพี้ยนหลังอัปเดต แก้อย่างไร

ปัญหา FiveM เสื้อผ้าหาย เสื้อเปลี่ยนเป็นคนละตัว ลำดับเสื้อเลื่อน Outfit เก่าเพี้ยน หรือหมวกและแว่นกลายเป็นคนละชิ้นหลัง GTA/FiveM Update เป็นปัญหาที่ Server ซึ่งมี Custom Clothes จำนวนมากควรให้ความสำคัญเป็นพิเศษ

สาเหตุสำคัญคือ GTA V จัด Ped Components และ Props เป็น Collections หลายชุด เมื่อนำ Collections ทั้งหมดมาต่อกันจะเกิดสิ่งที่เรียกว่า Global Index และเมื่อ GTA Title Update เพิ่ม Official DLC Collection ใหม่เข้าไป Custom Collections ซึ่งอยู่ท้ายรายการสามารถถูกเลื่อนตำแหน่ง ทำให้ Global Index เดิมไม่ชี้ไปยังเสื้อชิ้นเดิมอีกต่อไป

Cfx.re ยืนยันโดยตรงว่า Global Index ของ Custom Drawable Components และ Props สามารถเปลี่ยนทุก Title Update ขณะที่ Index แบบ Local ซึ่งอ้างภายใน Collection จะยังคง Stable หลังการอัปเดต จึงมี Collection-based natives เพื่อแก้ปัญหานี้โดยเฉพาะ.

บทความนี้จาก comsiam จะอธิบายวิธีแยกว่าเสื้อหายเพราะ Index เลื่อน, Resource หาย, Ped ผิด, Clothing Menu พัง หรือ Asset มีปัญหา พร้อมแนวทาง Migration ระบบ Outfit โดยไม่ต้องลบข้อมูลผู้เล่นทั้งหมด

① อาการเสื้อผ้าเพี้ยนหลังอัปเดตมีแบบไหนบ้าง

อาการที่พบบ่อย เช่น

ก่อน Update → Police Shirt
หลัง Update → Jacket อีกตัว

ก่อน Update → กางเกงสีดำ
หลัง Update → กางเกงคนละแบบ

ก่อน Update → หมวกตำรวจ
หลัง Update → หมวกคนละใบ

Outfit บางชุดหาย
Outfit บางชุดยังปกติ
Custom Clothes เลื่อนเลข
Male เพี้ยนแต่ Female ปกติ

ถ้าเกิดทันทีหลังเปลี่ยน GTA Title Update หรือ Game Build อย่าเพิ่งสรุปว่า Clothing Files ถูกลบ

ให้ตรวจ Index Mapping ก่อน

② สาเหตุสำคัญที่สุดคือ Global Index เลื่อน

Cfx.re อธิบายว่า Ped Drawable Components และ Props ถูกเก็บใน Named Collections

ภาพรวมเชิงแนวคิด

Base Game
↓
Official DLC 1
↓
Official DLC 2
↓
Official DLC 3
↓
Custom Collection A
↓
Custom Collection B

เมื่อ GTA มี Title Update และเพิ่ม Official DLC Collection ใหม่

Base Game
↓
Official DLC 1
↓
Official DLC 2
↓
Official DLC 3
↓
NEW DLC
↓
Custom Collection A
↓
Custom Collection B

ตำแหน่ง Global ของ Custom Collections จึงเลื่อนได้.

③ Global Index คืออะไร

Global Index คือการนับ Drawables ต่อกันตั้งแต่ Collection แรกไปจนถึง Collection สุดท้าย

สมมติ

Collection A
Local 0
Local 1
Local 2

Collection B
Local 0
Local 1
Local 2

เมื่อมองเป็น Global อาจกลายเป็น

A Local 0 → Global 0
A Local 1 → Global 1
A Local 2 → Global 2

B Local 0 → Global 3
B Local 1 → Global 4
B Local 2 → Global 5

นี่คือสิ่งที่ทำให้ Global Number ขึ้นอยู่กับ Collections ที่มาก่อนหน้า.

④ Local Index คืออะไร

Local Index คือเลขภายใน Collection ของตัวเอง

เช่น

police_collection

Local 0 = Police Shirt A
Local 1 = Police Shirt B
Local 2 = Police Jacket

ต่อให้มี Official DLC Collection ใหม่มาแทรกก่อนหน้า

police_collection
Local 0
Local 1
Local 2

ยังไม่ต้องเปลี่ยนเพราะมันนับจากต้น Collection ของตัวเอง

Cfx.re ระบุว่า Collection-based indexes ถูกออกแบบให้ Stable หลัง Title Updates.

⑤ ทำไม Outfit เก่าถึงกลายเป็นเสื้อคนละตัว

สมมติ Database บันทึก

Component 11
Drawable 185
Texture 0

และ 185 คือ Global Index

ก่อน Update

185 = Custom Police Shirt

หลัง GTA เพิ่ม Official DLC Items

185 = เสื้อ Official/Custom ตัวอื่น

Custom Police Shirt เดิมอาจเลื่อนไปเป็น

192

ดังนั้นไฟล์เสื้อไม่ได้หาย แต่เลขที่ Database เก็บไว้ไม่ชี้ไปยังเสื้อตัวเดิมแล้ว

นี่ตรงกับปัญหาที่ Cfx.re ระบุไว้สำหรับ Global Custom Drawable Index.

⑥ หมวกและ Props ก็เลื่อนได้หรือไม่

ได้

ปัญหานี้ไม่ได้จำกัดเฉพาะ Tops หรือ Pants

Cfx.re ระบุว่า Collection System ครอบคลุมทั้ง

Drawable Components
+
Props

ดังนั้น Custom

  • หมวก
  • แว่น
  • Props อื่น

ที่อ้างด้วย Global Index ก็สามารถได้รับผลจาก Title Update ได้เช่นกัน.

⑦ เสื้อหายกับเสื้อเปลี่ยนตัวต้องแยกกัน

เสื้อเปลี่ยนเป็นคนละตัว

สงสัย

Global Index Shift

ก่อน

ไม่มี Custom Clothes ใหม่เลย

สงสัย

Resource
Collection
Asset
Ped

ก่อน

เสื้อทรงถูกแต่สีผิด

สงสัย

Texture ID

การแยกอาการตั้งแต่แรกช่วยลดเวลาการ Debug ได้มาก

⑧ เช็กว่า Ped Model ถูกหรือไม่

FiveM ระบุว่า

Components
Drawables
Textures

สัมพันธ์กับ Ped Model.

ดังนั้นหลัง Update ต้องยืนยันด้วยว่าระบบ Character ยังใช้ Ped Model เดิม

เพราะแม้ Clothing Index ถูก แต่หาก Apply ข้อมูลของ Ped Model A ไปยัง Ped Model B เสื้อก็สามารถผิดได้

⑨ Male เพี้ยนแต่ Female ปกติ

อย่าแก้ทั้ง Clothing Database ทันที

ให้ตรวจ

Male Collection
Male Drawable Mapping
Male Saved Outfits

ก่อน

เพราะ Male/Female Ped มี Clothing Collections และ Variations ของตัวเอง

⑩ Female เพี้ยนแต่ Male ปกติ

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

หากปัญหาเกิดเฉพาะ Female ให้จำกัดการ Migration เฉพาะ Data ที่เกี่ยวข้องกับ Female ก่อน

ไม่ควรเปลี่ยน ID ของ Male Outfit ที่ยังทำงานปกติ

⑪ วิธีพิสูจน์ว่าเป็น Global Index Shift

เลือก Outfit ที่คุณรู้แน่นอนว่าเคยถูก

เช่น

Police Patrol Uniform

จดค่าก่อน Update

Component = 11
Drawable = 185
Texture = 0

หลัง Update ตรวจว่า Global 185 ยังเป็น Item เดิมหรือไม่

ถ้าไม่ใช่ แต่ Custom Collection เดิมยังมี Police Shirt อยู่ แสดงว่ามีโอกาสสูงว่า Global Mapping เลื่อน

⑫ Collection Name สำคัญอย่างไร

แทนที่จะจำว่า

Police Shirt = Global 185

ระบบที่ใช้ Collections สามารถอ้างประมาณ

Collection = custom_police
Local Drawable = 3
Texture = 0

ทำให้ Identity ของ Item ผูกกับ Collection โดยตรงมากขึ้น

Cfx.re สร้าง Collection-based natives เพื่อให้เข้าถึง Drawables และ Props ด้วย Collection Names และ Local Indexes.

⑬ SetPedCollectionComponentVariation คืออะไร

FiveM มี Native

SET_PED_COLLECTION_COMPONENT_VARIATION

ซึ่งเป็นทางเลือกของ SET_PED_COMPONENT_VARIATION แต่ใช้ Local Collection Indexing แทน Global Index.

แนวคิดการใช้งาน

SetPedCollectionComponentVariation(
ped,
componentId,
collectionName,
localDrawableId,
textureId,
paletteId
)

จุดสำคัญคือไม่ต้องบอก Global Drawable Number

⑭ Collection-based API ใช้ฝั่งไหน

เอกสาร Cfx.re ปัจจุบันระบุว่า Collection-based natives สำหรับ GTA V ชุดนี้ใช้งาน Client-side.

ดังนั้น Clothing System ที่จะใช้ Architecture นี้ต้องรองรับ Logic ฝั่ง Client อย่างเหมาะสม

⑮ Collection-based Natives มีไว้แก้ปัญหาอะไรโดยตรง

Cfx.re อธิบายเหตุผลไว้ชัดเจนว่า Global Index ของ Custom Drawable Components/Props เปลี่ยนทุก Title Update ทำให้การย้าย Server ไป Game Build ใหม่ซับซ้อน

Collection-based Index จึงถูกเพิ่มขึ้นเพื่อทำให้การ Update ในอนาคตง่ายขึ้น.

นี่ตรงกับปัญหา FiveM Clothes Order เพี้ยนโดยตรง

⑯ Collection-based Index ไม่ทำให้ Asset หาย

ต้องเข้าใจขอบเขต

ระบบ Collection ช่วยเรื่อง

Identification
Index Stability

แต่ไม่ได้ซ่อม

Missing Asset
Broken Texture
Bad Mesh
Resource Error
Clipping
Weighting

ถ้าไฟล์ Clothing Resource หายจริง Collection-based Native ก็สร้าง Asset ขึ้นมาไม่ได้

⑰ ตรวจว่า Collection มีอยู่จริง

FiveM มี

GET_PED_COLLECTIONS_COUNT

สำหรับคืนจำนวน Variation Collections ที่มีให้กับ Ped.

จึงสามารถใช้ Debug ได้ว่า Ped ปัจจุบันมี Collections ตามที่ระบบคาดหรือไม่

ตัวอย่าง

local ped = PlayerPedId()
local count = GetPedCollectionsCount(ped)

print("Collections:", count)

⑱ ถ้าจำนวน Collections ลดลงหลัง Update

อย่ารีบ Migration IDs

ให้ตรวจ

Clothing Resource Started?
Custom Collection ถูกโหลด?
Ped ถูก Model?
Resource มี Error?

เพราะในกรณีนี้อาจเป็น Resource/Asset Problem ไม่ใช่เพียง Global Index Shift

⑲ ตรวจ Variation ว่า Valid หรือไม่

FiveM มี

IS_PED_COLLECTION_COMPONENT_VARIATION_VALID

ซึ่งใช้ตรวจว่า Combination ของ

Ped
Component
Collection
Drawable
Texture

ถูกต้องหรือไม่.

มีประโยชน์มากตอน Migration Outfit

⑳ อย่า Apply Outfit เก่าทั้งหมดโดยไม่ Validate

ระบบที่ดีควรทำประมาณ

อ่าน Outfit เก่า
↓
แปลง Mapping
↓
ตรวจ Valid
↓
Valid → Apply
Invalid → Log/Fallback

แทนการ Apply IDs เก่าทั้งหมดแล้วปล่อยให้ผู้เล่นได้ชุดผิด

㉑ FiveM แปลง Global Index เป็น Local ได้ไหม

FiveM มี Collection APIs ที่ช่วยแปลงข้อมูล Global Drawable ไปเป็น Collection-relative Information

ตัวอย่าง Native ที่เกี่ยวข้องมี GET_PED_COLLECTION_LOCAL_INDEX_FROM_DRAWABLE และ Functions สำหรับค้นหา Collection Name จาก Drawable.

นี่มีประโยชน์มากกับ Migration Database

㉒ GetPedCollectionLocalIndexFromDrawable ใช้ทำอะไร

แนวคิดคือ

Global Drawable
↓
หา Local Index

ภายใน Collection ที่เกี่ยวข้อง

FiveM Documentation ระบุว่า Collection Name และ Local Index ที่ได้สามารถนำไปใช้กับ APIs อย่าง SET_PED_COLLECTION_COMPONENT_VARIATION.

จึงเป็นสะพานเชื่อมระบบ Clothing เก่ากับระบบใหม่ได้

㉓ หา Collection Name จาก Drawable ได้ไหม

ได้

FiveM มี Collection Native สำหรับค้นหา Collection Name จาก Drawable Information และผลที่ได้สามารถใช้ร่วมกับ Collection-based APIs.

ดังนั้นไม่จำเป็นต้องเขียน Mapping ทุก Item ด้วยมือเสมอไป หากระบบสามารถ Query ได้จาก Environment ที่ถูกต้อง

㉔ วิธี Migration Outfit แบบปลอดภัย

แนวคิดที่แนะนำ

Backup Database
↓
Freeze Clothing Changes ชั่วคราว
↓
อ่าน Outfit เดิม
↓
หา Ped Model
↓
หา Component
↓
แปลง Global Drawable
↓
หา Collection Name
↓
หา Local Drawable
↓
รักษา Texture ID
↓
Validate
↓
บันทึกข้อมูลใหม่
↓
Test

อย่า Run Migration บน Production Database โดยไม่มี Backup

㉕ Database ใหม่ควรเก็บอะไร

ถ้า Clothing Script รองรับ Collection-based Architecture ควรพิจารณาเก็บ

Ped Model
Component ID
Collection Name
Local Drawable ID
Texture ID
Palette ID ถ้าระบบใช้

สำหรับ Props ให้แยก

Ped Model
Prop Slot
Collection Name
Local Drawable
Texture

โครงสร้างนี้สอดคล้องกับแนวคิด Collection-local indexing ที่ Cfx.re ระบุว่ามีความเสถียรหลัง Title Updates.

㉖ ต้องเก็บ Global Drawable ไว้ไหม

ระหว่าง Migration อาจเก็บไว้เพื่อ

Rollback
Debug
Compatibility

ได้

แต่ถ้าระบบใหม่เลือก Collection + Local Index เป็น Source of Truth ไม่ควรพึ่ง Global Number อย่างเดียวอีก

㉗ อย่าลบ Outfit Database ทั้งหมด

ถ้าปัญหาเกิดหลัง Title Update อย่าทำ

DELETE FROM outfits

เพื่อเริ่มใหม่

เพราะข้อมูลเก่าอาจยังสามารถ Mapping ไป Collection/Local Index ได้

การลบทั้งหมดคือการทิ้งข้อมูลผู้เล่นทั้ง Server ทั้งที่ Root Cause อาจเป็นเพียง Index Shift

㉘ Backup อะไรก่อน Update

อย่างน้อย

Clothing Resources
Clothing Script
Character Script
Outfit Database
server.cfg
Current Game Build

และจด Version ของ Clothing Packs

เพื่อให้สามารถย้อนกลับและเทียบก่อน/หลังได้

㉙ Test Server สำคัญมาก

อย่าเปลี่ยน Game Build บน Production ก่อนทดสอบ

สร้าง Staging/Test Environment แล้วนำ

สำเนา Clothing Resources
สำเนา Clothing Script
ตัวอย่าง Outfit Database

ไปทดสอบ

จากนั้นตรวจ Saved Outfits หลายประเภท

㉚ Regression Test อะไรบ้างหลัง Update

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

Male
Female
Tops
Torso
Undershirts
Legs
Shoes
Accessories
Armor
Props
Hats
Glasses
Job Uniforms
Saved Outfits
New Character
Existing Character

อย่าทดสอบเพียงเสื้อหนึ่งตัวแล้วเปิด Production

㉛ Outfit ใหม่ถูก แต่ Outfit เก่าผิด

นี่เป็น Pattern สำคัญ

ถ้า

สร้าง Outfit หลัง Update → ถูก
Outfit ก่อน Update → ผิด

แสดงว่า Asset/Resource ใหม่อาจทำงานปกติ แต่ Saved IDs เก่ามีปัญหา

ให้เน้น

Database Migration
Global Index Mapping

ก่อน

㉜ Outfit ใหม่และเก่าผิดทั้งหมด

ให้ตรวจ Resource/Clothing Script เพิ่ม

อาจเป็น

Clothing Pack ไม่ Start
Ped Model เปลี่ยน
Collection หาย
Script ใช้ Index ผิดระบบ

อย่าสรุปว่าเป็น Database อย่างเดียว

㉝ เสื้อใหม่ใน Menu ถูก แต่ Character เก่าใส่ผิด

มีโอกาสสูงว่า Menu Query ข้อมูลปัจจุบันได้ถูกต้อง แต่ Character Database ยัง Apply IDs เก่า

ตรวจ Spawn/Appearance Load Logic

Character Spawn
↓
Load Saved Appearance
↓
Apply Drawable IDs

ว่ากำลังใช้ Global หรือ Collection-local Index

㉞ Character Spawn มาเสื้อถูกแล้วเปลี่ยนเป็นผิด

ถ้าเกิดภายในไม่กี่วินาทีหลัง Spawn ให้หา Resource ที่ Apply Appearance ซ้ำ

เช่น

Character Resource
↓
Skin Resource
↓
Clothing Resource
↓
Job Uniform Resource

Resource ตัวท้ายอาจเขียนทับชุดด้วยข้อมูลเก่า

㉟ Job Uniform เพี้ยนแต่ Outfit ผู้เล่นปกติ

ตรวจ Job Uniform Configuration

อาจยัง Hard-code

Drawable = 185

แบบ Global Index

แม้ Player Outfit System จะถูก Migration ไป Collection-based แล้ว

ต้อง Migration Uniform Presets ด้วย

㊱ Gang Outfit ก็ต้อง Migration

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

  • Police
  • EMS
  • Mechanic
  • Gang
  • Business
  • Prison
  • Event Uniform

หาก Resource เหล่านี้ Hard-code Global Drawables ต้องตรวจหลัง Title Update

㊲ Clothing Shop Database ก็ต้องตรวจ

บาง Server มีตารางแยกสำหรับ

Saved Outfit
Shop Items
Job Uniform
Starter Clothes

การ Migration เฉพาะ Saved Outfit จึงอาจยังทำให้ Shop แสดงเลขเก่า

ต้องทำ Inventory ของทุกจุดที่เก็บ Clothing IDs

㊳ Search Code หา Drawable แบบ Hard-code

ค้นหาใน Resources เช่น

drawable
drawableId
componentId
SetPedComponentVariation
SetPedPropIndex

เพื่อหา Config ที่ยังใช้ Global Index

โดยเฉพาะ Resource เก่าที่มี Uniform IDs เขียนไว้ใน Lua/JSON

㊴ SetPedComponentVariation ผิดหรือไม่

ไม่ผิด

FiveM ยังคงมี SET_PED_COMPONENT_VARIATION และ Native นี้ใช้ Global-style Component Variation IDs ที่สัมพันธ์กับ Ped Model.

ปัญหาคือถ้าคุณใช้ Global IDs ของ Custom Collections เป็นตัวระบุถาวรข้าม Title Updates

Collection-based alternative จึงเหมาะกว่าในสถานการณ์นั้น.

㊵ Props ควรใช้ Collection-based API ด้วยหรือไม่

ถ้าระบบต้องการลดปัญหา Custom Prop Global Index Shift ควรพิจารณา

FiveM มี

SET_PED_COLLECTION_PROP_INDEX

ซึ่งเป็นทางเลือกของ SET_PED_PROP_INDEX และใช้ Collection-local indexing.

เหมาะกับหมวก แว่น และ Props ที่เป็น Custom Collections

㊶ Texture ID เลื่อนด้วยหรือไม่

ประเด็นหลักที่ Cfx.re ระบุคือ Global Drawable/Prop Index ของ Custom Collections เลื่อนตาม Title Update.

Texture ID ทำงานภายใน Drawable ที่เลือก

ดังนั้นถ้า Drawable Mapping เปลี่ยน ผู้เล่นก็อาจดูเหมือน Texture เพี้ยนเพราะจริง ๆ กำลังใส่ Drawable คนละตัว

ควรแก้ Drawable Mapping ก่อนปรับ Texture IDs แบบสุ่ม

㊷ เสื้อทรงเดิมแต่สีผิดหลัง Update

ถ้าแน่ใจว่า Drawable ยังเป็นตัวเดิม ให้ตรวจ Texture ID ต่อ

อาจเป็น

Database Field ผิด
Migration ผิด
Preset ผิด

ไม่จำเป็นต้องเป็น Global Index Shift ทุกกรณี

㊸ Clothing Resource หายหลัง Update

ถ้า Custom Clothes หายจาก Menu ทั้ง Pack ให้ตรวจ Resource Layer

Resource Folder
fxmanifest.lua
Resource Start
Dependencies
Console Errors

Resource Manifest เป็นตัวกำหนด Metadata และ Requirements ของ Resource.

นี่ต่างจากกรณี Global Index เลื่อนที่ Asset ยังอยู่แต่ ID เปลี่ยน

㊹ Game Build Requirement ต้องตรวจหรือไม่

ต้องตรวจหาก Resource Creator กำหนดไว้

FiveM Resource Manifest รองรับ Dependency Constraints รวมถึง Game Build Requirements.

ดังนั้นหลังเปลี่ยน Build หาก Resource ไม่ Start ให้แก้ Compatibility/Requirement ก่อน Migration Clothing IDs

㊺ อย่าเปลี่ยน Game Build กลับทันทีโดยไม่เก็บข้อมูล

ถ้าพบ Outfit เพี้ยนหลัง Update ให้บันทึก

Build เดิม
Build ใหม่
ตัวอย่าง Global ID เดิม
Collection Name
Local Index

ก่อน Rollback

ข้อมูลนี้ช่วยทำ Migration ภายหลังได้มาก

㊻ ใช้ F8 ช่วย Debug

FiveM Client Console เปิดด้วย

F8

Cfx.re ระบุว่า Console มีไว้ช่วย Development และ Debug Resource Issues.

ตรวจ Error จาก

  • Clothing Resource
  • Character Resource
  • Appearance Resource

โดยเฉพาะตอน Spawn และ Apply Outfit

㊼ Log ค่าที่ Script Apply

แทนที่จะดูตัวละครแล้วเดา ให้ Log

Ped Model
Component
Collection
Drawable
Texture

ตัวอย่าง

print(
componentId,
collectionName,
drawableId,
textureId
)

จากนั้นเปรียบเทียบกับค่าที่ Database มี

㊽ Validate ก่อน Apply

สำหรับ Collection-based Components สามารถใช้

IS_PED_COLLECTION_COMPONENT_VARIATION_VALID

ก่อน Apply ได้.

ถ้า Invalid

อย่า Apply
↓
Log Outfit ID
↓
Fallback

ช่วยป้องกัน Character Appearance พังจากข้อมูล Migration ที่ผิด

㊾ ควรมี Fallback Clothes

ระบบ Production ควรมีชุด Default ที่ปลอดภัย

ตัวอย่าง

Outfit Valid
→ Apply

Outfit Invalid
→ Default Clothing
→ Log เพื่อซ่อมภายหลัง

ดีกว่าปล่อย Character ใส่ Item ผิดหรือมี Appearance ที่เสีย

㊿ อย่า Migration ทุกคนจากตัวอย่าง Outfit เดียว

ต้องทดสอบหลาย Items

เช่น

Base GTA Clothes
Official DLC Clothes
Custom Pack A
Custom Pack B
Custom Props

เพราะการ Mapping อาจถูกบาง Collection แต่ผิดอีก Collection

51. Custom Collections ทั้งหมดเลื่อนเท่ากันไหม

อย่าคำนวณด้วยสูตร

ของเก่าทุกตัว + 7

แล้ว Update Database ทั้งหมดโดยไม่ตรวจ

แม้ Global Index Shift จะเกิดจากการเพิ่ม Collections ก่อนหน้า แต่ระบบจริงมีหลาย Components, Props และ Ped Models

วิธี Collection-aware Mapping ปลอดภัยกว่าการบวก Offset แบบเหมา

Cfx.re มี APIs สำหรับ Collection Name และ Local Index เพื่อหลีกเลี่ยงการพึ่ง Offset แบบนี้.

52. ทำไมไม่ควรแก้เลขด้วย Excel แล้ว Import ทับทันที

เพราะคุณอาจ

  • เปลี่ยน Base Game Items ที่ไม่ควรเปลี่ยน
  • เปลี่ยน Male/Female ผิดชุด
  • เปลี่ยน Props ด้วย Offset ของ Components
  • ทำ Texture Mapping เสีย
  • ทำ Custom Collection คนละ Pack ผิด

ควร Migration ด้วย Collection Identity มากกว่า Arithmetic Offset ถ้าทำได้

53. Clothing Menu ควรแสดง Collection Name ได้ไหม

สำหรับ Admin/Developer Tool ควรพิจารณา

เช่น

Collection: custom_police
Local Drawable: 3
Texture: 1
Global Drawable: 192

ทำให้ Debug ง่ายกว่าการเห็นเพียง

Top 192

FiveM มี APIs สำหรับค้นหา Collection Name และ Collection-relative Index จาก Drawable.

54. Global Index ยังมีประโยชน์ไหม

มีสำหรับ Compatibility และ APIs เดิมหลายตัว

แต่ไม่ควรใช้เป็น Stable Persistent Identifier ของ Custom Clothes ข้าม Title Updates หากระบบสามารถใช้ Collection-based IDs ได้

นี่เป็นหัวใจของ Documentation ใหม่จาก Cfx.re.

55. Update Clothing Pack กับ GTA Update ต่างกัน

ต้องแยก

GTA Title Update

อาจทำให้ Global Index ของ Custom Collections Shift.

Clothing Pack Update

Creator อาจ

  • เพิ่ม Items
  • ลบ Items
  • เปลี่ยน Collection
  • เปลี่ยน Asset Names

ซึ่งเป็นอีกประเภทของ Migration

จึงควร Version Clothing Packs แยกจาก Game Build

56. Creator เปลี่ยน Collection Name มีผลไหม

มีมากหาก Database อ้าง Collection Name

Collection-based Index Stable ภายใต้ Collection เดิม ไม่ได้หมายความว่า Developer สามารถ Rename/Reorganize Collection โดยไม่มีผลต่อ Saved Data

ก่อน Update Pack จึงควรอ่าน Changelog และทดสอบ Database Mapping

57. อย่า Merge Clothing Pack ระหว่างกำลัง Migration

ทำทีละอย่าง

Migration Game Build
↓
ตรวจให้จบ
↓
Backup
↓
ค่อย Merge/Update Clothing Pack

ถ้าทำพร้อมกันแล้ว Outfit เพี้ยน คุณจะไม่รู้ว่าเกิดจาก

Title Update
หรือ
Pack Merge

58. วิธี Rollback ที่ถูกต้อง

ถ้า Production พังหลัง Update

ควรมี

Database Backup
Clothing Resource Backup
Script Backup
Previous Build Configuration

จากนั้น Rollback เป็นชุดเดียว

อย่า Rollback เพียง Clothing Files แต่ใช้ Database ที่ถูก Migration ไปแล้ว เพราะ Mapping อาจไม่ตรง Environment เก่า

59. วิธี Update ที่ปลอดภัยสำหรับ Server ใหญ่

Workflow ที่แนะนำ

① Backup

② Clone Production ไป Test Server

③ Update Game Build ใน Test

④ Start Clothing Resources

⑤ ตรวจ Collections

⑥ ตรวจ Male/Female

⑦ ตรวจ Global Index Shift

⑧ แปลงตัวอย่าง Outfits เป็น Collection IDs

⑨ Validate

⑩ ทดสอบ Job Uniforms

⑪ ทดสอบ Props

⑫ ทดสอบ Reconnect

⑬ ทดสอบ Restart

⑭ Migration Database สำเนา

⑮ ตรวจอีกครั้ง

⑯ จึงนำขึ้น Production

60. ตารางวิเคราะห์อาการหลังอัปเดต

อาการสิ่งที่ควรตรวจ
Custom Shirt กลายเป็นเสื้อตัวอื่นGlobal Index Shift
เสื้อใหม่ไม่ขึ้นทั้ง PackResource/Collection
Outfit ใหม่ถูก แต่ Outfit เก่าผิดSaved Global IDs
Male ผิด Female ถูกMale Mapping
Female ผิด Male ถูกFemale Mapping
Tops ผิด แต่ Pants ปกติComponent-specific Mapping
หมวกเปลี่ยนตัวProp Global Index
เสื้อทรงถูกแต่สีผิดTexture ID
Restart แล้วชุดเปลี่ยนAppearance Load Logic
Job Uniform ผิด แต่ Player Outfit ถูกHard-coded Uniform IDs
Menu ถูก แต่ Spawn ผิดDatabase/Spawn Script
Pack เดี่ยวถูก Merge แล้วผิดAsset/Collection Conflict
Resource ไม่ Startหลัง Build UpdateManifest/Dependency

61. Checklist ก่อน Migration

☐ Backup Database
☐ Backup Clothing Resources
☐ จด Game Build เดิม
☐ จด Game Build ใหม่
☐ ระบุ Ped Models
☐ ระบุ Custom Collections
☐ ตรวจ Male
☐ ตรวจ Female
☐ ตรวจ Components
☐ ตรวจ Props
☐ หา Code ที่ Hard-code Drawable
☐ หา Uniform Config
☐ หา Saved Outfit Tables
☐ หา Clothing Shop Data
☐ ทดสอบ Collection APIs

62. Checklist หลัง Migration

☐ Existing Character ถูก
☐ New Character ถูก
☐ Saved Outfit ถูก
☐ Save Outfit ใหม่ได้
☐ Reconnect แล้วยังถูก
☐ Restart แล้วยังถูก
☐ Police Uniform ถูก
☐ EMS Uniform ถูก
☐ Gang Uniform ถูก
☐ Props ถูก
☐ Male/Female ถูก
☐ ไม่มี Invalid Variations

63. วิธี Debug ที่เร็วที่สุด

ถ้า Update แล้วเสื้อผิด ให้ทำตามนี้

ขั้นที่ 1

เลือก Character/Outfit ที่เคยปกติ

ขั้นที่ 2

ดูว่าเป็น Item คนละตัวหรือเพียง Texture ผิด

ขั้นที่ 3

ตรวจ Ped Model

FiveM ระบุว่า Component/Drawable/Texture IDs ขึ้นกับ Ped Model.

ขั้นที่ 4

ตรวจว่า Custom Collection ยังมีอยู่

ใช้ Collection APIs ของ FiveM.

ขั้นที่ 5

ตรวจ Global Drawable เดิม

ขั้นที่ 6

หา Collection Name และ Local Index ของ Item

FiveM มี Native สำหรับ Mapping ข้อมูลเหล่านี้.

ขั้นที่ 7

Validate Variation

ใช้ Collection Variation Validation.

ขั้นที่ 8

Apply ด้วย Collection-based Native

SET_PED_COLLECTION_COMPONENT_VARIATION

ขั้นที่ 9

ถ้าถูกแล้ว ให้แก้ Persistence Layer

ขั้นที่ 10

Migration Saved Outfits

64. Architecture ที่เหมาะกับ Server ระยะยาว

แทนที่จะเก็บ

Ped
Component
Global Drawable
Texture

เพียงอย่างเดียว

ควรพิจารณา

Ped Model
↓
Collection Name
↓
Component / Prop Slot
↓
Local Drawable
↓
Texture

สำหรับ Custom Clothes

เพราะ Cfx.re ระบุชัดว่า Collection-local indexes มีความเสถียรหลัง Title Updates มากกว่า Global Index.

65. สิ่งที่ไม่ควรทำหลังเสื้อเพี้ยน

หลีกเลี่ยง

ลบ Clothing Pack ทั้งหมด
ลบ Outfit Database
บวก Drawable ID ทุกตัวด้วยเลขเดียว
เปลี่ยน Texture IDs แบบสุ่ม
Copy Clothing Pack ใหม่ทับของเก่า
Merge Pack ระหว่าง Migration
เปลี่ยน Male IDs ด้วย Female Mapping
ล้าง Cache ผู้เล่นทั้งหมดก่อนตรวจ Server

สิ่งเหล่านี้สามารถเปลี่ยนปัญหา Index เล็ก ๆ ให้กลายเป็น Data Loss ได้

66. ต้องล้าง Cache หลัง GTA Update ไหม

ไม่ควรเป็นคำตอบแรกของปัญหา

ผู้เล่นทุกคน
+
Outfit เดิม
+
กลายเป็นคนละ Item หลัง Update

Pattern แบบนี้ควรตรวจ Global Index/Collection Mapping ก่อน เพราะ Cfx.re ระบุปัญหานี้ไว้โดยตรง.

Cache ไม่สามารถทำให้ Saved Global ID กลับไปหมายถึง Item เดิมได้

67. ทำไม Collection-based System สำคัญมากกับ Server ที่มีเสื้อหลายพันตัว

Server เล็กอาจแก้ IDs ด้วยมือได้

แต่ Server ที่มี

ผู้เล่นหลายพัน Outfit
Custom Tops หลายร้อย
Custom Pants
Shoes
Hats
Glasses
Job Uniforms
Gang Uniforms

การ Migration Global IDs ทุก Title Update จะกลายเป็นงานใหญ่

Collection-based IDs ลดการพึ่งตำแหน่งรวมของ Collections และทำให้ Custom Item Identity เสถียรกว่า.

68. สรุปสั้นที่สุดว่าทำไมเสื้อเพี้ยนหลัง Update

จำสูตรนี้

GTA Title Update
↓
Official Collection ใหม่
↓
Custom Collections ถูกเลื่อนใน Global List
↓
Global Drawable IDs เปลี่ยน
↓
Database ยังเก็บเลขเดิม
↓
ผู้เล่นได้เสื้อคนละตัว

นี่คือเหตุผลหลักที่ Cfx.re เพิ่ม Collection-based natives.

สรุป FiveM เสื้อผ้าหายหรือลำดับเพี้ยนหลังอัปเดต แก้อย่างไร

ถ้า FiveM เสื้อผ้าหายหรือลำดับเพี้ยนหลัง GTA/FiveM Update สิ่งแรกที่ต้องแยกคือ Asset หายจริง หรือเพียง Global Drawable Index ถูกเลื่อน

Cfx.re ระบุว่า Ped Drawable Components และ Props อยู่ใน Named Collections โดย Global Index จะนับผ่าน Collections ทั้งหมด เมื่อ Title Update เพิ่ม Official DLC Collection ใหม่ Custom Collections ที่อยู่ด้านหลังจึงถูก Shift และ Global Index ของ Custom Drawables/Props เปลี่ยนได้ทุก TU.

ทางออกที่ FiveM เตรียมไว้คือ Collection-based natives ซึ่งใช้

Collection Name
+
Local Drawable Index

และ Cfx.re ระบุว่า Collection-relative indexes ถูกออกแบบให้ Stable หลัง Title Updates.

ดังนั้นถ้า Outfit ใหม่ถูกแต่ Outfit เก่าผิด ให้ตรวจ Saved Global IDs

ถ้า เสื้อกลายเป็นคนละตัว ให้ตรวจ Drawable/Collection ก่อน Texture

ถ้า หมวกหรือแว่นเปลี่ยนตัว ให้ตรวจ Prop Index เพราะ Custom Props ก็ได้รับผลจาก Global Index Shift ได้เช่นกัน.

ถ้า Custom Clothes หายทั้ง Pack ให้กลับไปตรวจ Resource, Manifest และ Collection แทนที่จะ Migration Database ทันที

FiveM ยังมี Native สำหรับค้นหา Collection-relative Index และ Collection Name จาก Drawable ทำให้สามารถสร้าง Migration Tool จากระบบ Global Index เดิมไปสู่ Collection-based System ได้ โดยไม่จำเป็นต้องลบ Outfit ผู้เล่นทั้งหมด.

สำหรับ Server ที่มี Custom Clothes จำนวนมาก แนวทางของ comsiam คือไม่ควรใช้ Global Drawable Number เป็น Identifier ถาวรของ Custom Clothes เพียงค่าเดียวอีกต่อไป หาก Clothing System สามารถพัฒนาได้ ควรเก็บ Ped Model, Collection Name, Local Drawable และ Texture ให้เป็นระบบ พร้อม Backup และทดสอบ Migration บน Test Server ทุกครั้งก่อนเปลี่ยน Game Build ใน Production

Comments

Popular posts from this blog

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

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

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