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 ALocal 0Local 1Local 2Collection BLocal 0Local 1Local 2
เมื่อมองเป็น Global อาจกลายเป็น
A Local 0 → Global 0A Local 1 → Global 1A Local 2 → Global 2B Local 0 → Global 3B Local 1 → Global 4B Local 2 → Global 5
นี่คือสิ่งที่ทำให้ Global Number ขึ้นอยู่กับ Collections ที่มาก่อนหน้า.
④ Local Index คืออะไร
Local Index คือเลขภายใน Collection ของตัวเอง
เช่น
police_collectionLocal 0 = Police Shirt ALocal 1 = Police Shirt BLocal 2 = Police Jacket
ต่อให้มี Official DLC Collection ใหม่มาแทรกก่อนหน้า
police_collectionLocal 0Local 1Local 2
ยังไม่ต้องเปลี่ยนเพราะมันนับจากต้น Collection ของตัวเอง
Cfx.re ระบุว่า Collection-based indexes ถูกออกแบบให้ Stable หลัง Title Updates.
⑤ ทำไม Outfit เก่าถึงกลายเป็นเสื้อคนละตัว
สมมติ Database บันทึก
Component 11Drawable 185Texture 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 ใหม่เลย
สงสัย
ResourceCollectionAssetPed
ก่อน
เสื้อทรงถูกแต่สีผิด
สงสัย
Texture ID
การแยกอาการตั้งแต่แรกช่วยลดเวลาการ Debug ได้มาก
⑧ เช็กว่า Ped Model ถูกหรือไม่
FiveM ระบุว่า
ComponentsDrawablesTextures
สัมพันธ์กับ Ped Model.
ดังนั้นหลัง Update ต้องยืนยันด้วยว่าระบบ Character ยังใช้ Ped Model เดิม
เพราะแม้ Clothing Index ถูก แต่หาก Apply ข้อมูลของ Ped Model A ไปยัง Ped Model B เสื้อก็สามารถผิดได้
⑨ Male เพี้ยนแต่ Female ปกติ
อย่าแก้ทั้ง Clothing Database ทันที
ให้ตรวจ
Male CollectionMale Drawable MappingMale 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 = 11Drawable = 185Texture = 0
หลัง Update ตรวจว่า Global 185 ยังเป็น Item เดิมหรือไม่
ถ้าไม่ใช่ แต่ Custom Collection เดิมยังมี Police Shirt อยู่ แสดงว่ามีโอกาสสูงว่า Global Mapping เลื่อน
⑫ Collection Name สำคัญอย่างไร
แทนที่จะจำว่า
Police Shirt = Global 185
ระบบที่ใช้ Collections สามารถอ้างประมาณ
Collection = custom_policeLocal Drawable = 3Texture = 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 ช่วยเรื่อง
IdentificationIndex Stability
แต่ไม่ได้ซ่อม
Missing AssetBroken TextureBad MeshResource ErrorClippingWeighting
ถ้าไฟล์ 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 ของ
PedComponentCollectionDrawableTexture
ถูกต้องหรือไม่.
มีประโยชน์มากตอน Migration Outfit
⑳ อย่า Apply Outfit เก่าทั้งหมดโดยไม่ Validate
ระบบที่ดีควรทำประมาณ
อ่าน Outfit เก่า↓แปลง Mapping↓ตรวจ Valid↓Valid → ApplyInvalid → 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 ModelComponent IDCollection NameLocal Drawable IDTexture IDPalette ID ถ้าระบบใช้
สำหรับ Props ให้แยก
Ped ModelProp SlotCollection NameLocal DrawableTexture
โครงสร้างนี้สอดคล้องกับแนวคิด Collection-local indexing ที่ Cfx.re ระบุว่ามีความเสถียรหลัง Title Updates.
㉖ ต้องเก็บ Global Drawable ไว้ไหม
ระหว่าง Migration อาจเก็บไว้เพื่อ
RollbackDebugCompatibility
ได้
แต่ถ้าระบบใหม่เลือก 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 ResourcesClothing ScriptCharacter ScriptOutfit Databaseserver.cfgCurrent Game Build
และจด Version ของ Clothing Packs
เพื่อให้สามารถย้อนกลับและเทียบก่อน/หลังได้
㉙ Test Server สำคัญมาก
อย่าเปลี่ยน Game Build บน Production ก่อนทดสอบ
สร้าง Staging/Test Environment แล้วนำ
สำเนา Clothing Resourcesสำเนา Clothing Scriptตัวอย่าง Outfit Database
ไปทดสอบ
จากนั้นตรวจ Saved Outfits หลายประเภท
㉚ Regression Test อะไรบ้างหลัง Update
ตรวจอย่างน้อย
MaleFemaleTopsTorsoUndershirtsLegsShoesAccessoriesArmorPropsHatsGlassesJob UniformsSaved OutfitsNew CharacterExisting Character
อย่าทดสอบเพียงเสื้อหนึ่งตัวแล้วเปิด Production
㉛ Outfit ใหม่ถูก แต่ Outfit เก่าผิด
นี่เป็น Pattern สำคัญ
ถ้า
สร้าง Outfit หลัง Update → ถูกOutfit ก่อน Update → ผิด
แสดงว่า Asset/Resource ใหม่อาจทำงานปกติ แต่ Saved IDs เก่ามีปัญหา
ให้เน้น
Database MigrationGlobal Index Mapping
ก่อน
㉜ Outfit ใหม่และเก่าผิดทั้งหมด
ให้ตรวจ Resource/Clothing Script เพิ่ม
อาจเป็น
Clothing Pack ไม่ StartPed 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 OutfitShop ItemsJob UniformStarter Clothes
การ Migration เฉพาะ Saved Outfit จึงอาจยังทำให้ Shop แสดงเลขเก่า
ต้องทำ Inventory ของทุกจุดที่เก็บ Clothing IDs
㊳ Search Code หา Drawable แบบ Hard-code
ค้นหาใน Resources เช่น
drawabledrawableIdcomponentIdSetPedComponentVariationSetPedPropIndex
เพื่อหา 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 Folderfxmanifest.luaResource StartDependenciesConsole 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 NameLocal 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 ModelComponentCollectionDrawableTexture
ตัวอย่าง
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→ ApplyOutfit Invalid→ Default Clothing→ Log เพื่อซ่อมภายหลัง
ดีกว่าปล่อย Character ใส่ Item ผิดหรือมี Appearance ที่เสีย
㊿ อย่า Migration ทุกคนจากตัวอย่าง Outfit เดียว
ต้องทดสอบหลาย Items
เช่น
Base GTA ClothesOfficial DLC ClothesCustom Pack ACustom Pack BCustom 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_policeLocal Drawable: 3Texture: 1Global 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 BackupClothing Resource BackupScript BackupPrevious 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 |
| เสื้อใหม่ไม่ขึ้นทั้ง Pack | Resource/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 Update | Manifest/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 ระยะยาว
แทนที่จะเก็บ
PedComponentGlobal DrawableTexture
เพียงอย่างเดียว
ควรพิจารณา
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 ที่มี
ผู้เล่นหลายพัน OutfitCustom Tops หลายร้อยCustom PantsShoesHatsGlassesJob UniformsGang 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
Post a Comment