FiveM Props คืออะไร และใช้งานอย่างไร ทั้ง Object Props และ Ped Props

คำว่า FiveM Props สามารถหมายถึงได้มากกว่าหนึ่งอย่าง และนี่เป็นสาเหตุที่ผู้เริ่มต้นมักสับสน

ในบริบทของ FiveM คำว่า Prop มักหมายถึง Object Model ที่ถูกสร้างหรือวางไว้ในโลกเกม เช่น โต๊ะ เก้าอี้ กล่อง กระเป๋า ขวด โทรศัพท์ หรืออุปกรณ์ประกอบฉาก โดย Native CREATE_OBJECT ของ FiveM อธิบายตรง ๆ ว่าใช้สร้าง Object หรือ Prop จาก Model ที่กำหนด ณตำแหน่งที่ระบุ.

แต่ในระบบเสื้อผ้า GTA V/FiveM ยังมีคำว่า Ped Props ซึ่งหมายถึง Prop Variations ที่ติดกับ Ped เช่นหมวกหรือแว่น และถูกควบคุมด้วย Native อย่าง SET_PED_PROP_INDEX แยกจาก World Object Props.

บทความนี้จาก comsiam จะอธิบายทั้งสองความหมาย พร้อมวิธีสร้าง Object Prop, Attach กับ Ped, ลบ Object, ทำ Networked Prop และแยก Ped Props ออกจาก Clothing Components อย่างถูกต้อง

① FiveM Props คืออะไร

ถ้าพูดถึง Object ในโลกเกม Prop สามารถเป็นสิ่งของ เช่น

โต๊ะ
เก้าอี้
ขวด
กล่อง
กระเป๋า
โทรศัพท์
กรวยจราจร
ป้าย
อาหาร
อุปกรณ์งานช่าง
ของตกแต่ง

FiveM มี CREATE_OBJECT สำหรับสร้าง Object/Prop จาก Model ที่กำหนดโดยตรง.

② Prop กับ Object เหมือนกันไหม

ในงาน FiveM สองคำนี้มักถูกใช้ใกล้เคียงกันมาก

Native ของ Cfx.re ใช้ชนิด Entity ว่า

Object

และคำอธิบายของ CREATE_OBJECT เรียกสิ่งที่สร้างว่า

object (prop)

ดังนั้นเวลา Developer พูดถึง Prop ที่ Spawn ในโลกเกม ส่วนใหญ่กำลังพูดถึง Object Entity.

③ Object Prop ต่างจาก Ped Prop อย่างไร

จำแบบนี้

Object Prop
=
Object Entity ในโลกเกม

Ped Prop
=
เครื่องแต่งกาย/Accessory Variation ของ Ped

ตัวอย่าง

กล่องบนพื้น
→ Object Prop

หมวกบนหัวผู้เล่น
→ Ped Prop

FiveM ใช้ CREATE_OBJECT สำหรับ Object ขณะที่ SET_PED_PROP_INDEX ใช้กำหนด Prop Variation ของ Ped.

④ Prop ต่างจาก Ped อย่างไร

Prop
→ Object Entity

Ped
→ Character Entity

OneSync ของ FiveM แยก Entity Types เช่น Peds, Vehicles และ Objects และรองรับการสร้าง Entity เหล่านี้ฝั่ง Server.

ดังนั้นหุ่นตกแต่งที่ไม่มี Character AI อาจเหมาะกับ Object มากกว่าการสร้าง Ped

⑤ Prop ต่างจาก Map Object อย่างไร

Map Object อาจเป็น Object ที่ถูกวางเป็นส่วนหนึ่งของ Map/YMAP ตั้งแต่ Resource โหลด

ส่วน Script Prop มักถูกสร้างระหว่าง Runtime เช่น

ผู้เล่นใช้ Item
↓
Create Object
↓
Attach เข้ามือ
↓
ใช้งานเสร็จ
↓
Delete Object

ทั้งสองอาจใช้ Model ที่หน้าตาเหมือนกัน แต่ Lifecycle ต่างกัน

⑥ CreateObject คืออะไร

FiveM มี Native

CreateObject(
    modelHash,
    x,
    y,
    z,
    isNetwork,
    netMissionEntity,
    doorFlag
)

สำหรับสร้าง Object/Prop ที่ตำแหน่งที่กำหนด และ Documentation ระบุว่า Model ควรถูกโหลดไว้ก่อนใช้งาน.

⑦ ก่อนสร้าง Prop ต้องโหลด Model ไหม

ควร

หลักเหมือนกับการสร้าง Ped หรือ Vehicle คือ Model Asset ควรพร้อมก่อนนำไปสร้าง Entity

Workflow คือ

Model
↓
RequestModel
↓
รอ Model โหลด
↓
CreateObject

CREATE_OBJECT ของ Cfx.re ระบุว่า Model ควรถูก Loaded อยู่แล้วก่อนสร้าง Object.

⑧ ตัวอย่างสร้าง Prop พื้นฐาน

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

local model = `prop_box_wood02a_pu`

RequestModel(model)

while not HasModelLoaded(model) do
    Wait(0)
end

local obj = CreateObject(
    model,
    100.0,
    200.0,
    30.0,
    false,
    false,
    false
)

SetModelAsNoLongerNeeded(model)

จุดสำคัญคือ Load Model ก่อน แล้วจึง Create Object.

⑨ CreateObject ทำไม Z อาจดูไม่ตรง

เอกสาร CREATE_OBJECT ระบุว่าตำแหน่ง Z ของ Object จะถูก Offset ด้วย Radius ของ Model.

ดังนั้นถ้าต้องการให้ตำแหน่งของ Model อยู่ตรงพิกัดที่ระบุแบบ Center มากกว่า สามารถพิจารณา CREATE_OBJECT_NO_OFFSET

⑩ CreateObjectNoOffset คืออะไร

FiveM มี

CREATE_OBJECT_NO_OFFSET

ซึ่งสร้าง Object โดย Center ของ Model อยู่ที่ตำแหน่งที่กำหนด แทนพฤติกรรม Z-offset ของ CREATE_OBJECT.

มีประโยชน์เมื่อ Placement ต้องแม่น เช่น

Furniture
Interior Object
Attached Object
Custom Interaction Prop

⑪ CreateObject กับ CreateObjectNoOffset ใช้อันไหนดี

ใช้ตามงาน

CreateObject

เหมาะกับการ Spawn Prop ทั่วไปที่ต้องการ Behavior ตาม Native ปกติ

CreateObjectNoOffset

เหมาะเมื่อคุณต้องควบคุม Center Position ให้ตรงกับ Coordinates ที่กำหนดมากขึ้น.

อย่าเปลี่ยนจากตัวหนึ่งเป็นอีกตัวเพียงเพื่อแก้ตำแหน่ง โดยไม่เข้าใจความแตกต่างเรื่อง Offset

⑫ Prop Spawn แล้วจมพื้น

ตรวจ

Z Coordinate
Model Origin
CreateObject vs CreateObjectNoOffset
Collision

ก่อน

เพราะ CREATE_OBJECT มีพฤติกรรม Z-offset ตาม Model Radius ขณะที่ CREATE_OBJECT_NO_OFFSET ใช้ Center Position โดยตรง.

⑬ Prop ลอยเหนือพื้น

สาเหตุที่ควรตรวจเหมือนกัน ได้แก่

Z สูงเกิน
Model Origin
Object Radius
Collision
Placement Method

อย่าปรับ Z แบบสุ่มหลายเมตรก่อนรู้ว่าใช้ Native ตัวใดอยู่

⑭ Prop หมุนได้ไหม

Object เป็น Entity จึงสามารถใช้ Entity Transform Natives กับมันได้ เช่นการกำหนด Position/Rotation ตามระบบ Entity ของ GTA/FiveM

เวลา Spawn Furniture หรือ Decoration ควรเก็บ

Position
Rotation

ไว้ด้วย ไม่ใช่เฉพาะ X/Y/Z

⑮ Heading อย่างเดียวพอสำหรับ Prop ไหม

ขึ้นกับ Object

Object ธรรมดาที่หมุนเพียงแกน Z อาจใช้ Heading ได้

แต่ Props ที่ต้องเอียงหรือวางในท่าพิเศษ เช่น

ป้ายเอียง
กระเป๋าวางบนโต๊ะ
อุปกรณ์ติดตัวผู้เล่น

มักต้องควบคุม Rotation มากกว่าแกนเดียว

⑯ Prop มี Collision ได้ไหม

ได้

Object Entity สามารถมี Collision และ FiveM มี Native

SET_ENTITY_COLLISION

สำหรับเปิดหรือปิด Collision ของ Entity.

จึงต้องเลือกให้เหมาะกับ Gameplay

⑰ Prop แบบไหนควรมี Collision

ตัวอย่าง

Barrier
โต๊ะ
กล่องใหญ่
สิ่งกีดขวาง

อาจต้องมี Collision

แต่ Prop Cosmetic เช่นของเล็กที่ Attach กับ Character อาจไม่ต้องการ Collision ระหว่าง Prop กับ Ped

ขึ้นอยู่กับ Gameplay Design

⑱ ปิด Collision ของ Prop ได้ไหม

ใช้

SetEntityCollision(object, false, false)

ตาม Behavior ที่ต้องการ

SET_ENTITY_COLLISION รับ Entity, Toggle และ keepPhysics เพื่อควบคุม Collision State.

ควรทดสอบ Physics หลังเปลี่ยนค่า

⑲ Prop Attach กับ Player ได้ไหม

ได้

FiveM มี Native

ATTACH_ENTITY_TO_ENTITY

สำหรับ Attach Entity หนึ่งเข้ากับอีก Entity และรองรับ Bone Index, Position Offset และ Rotation Offset.

นี่เป็นพื้นฐานของ Props เช่น

โทรศัพท์ในมือ
กระเป๋า
กล่อง
อาหาร
เครื่องมือ
ร่ม

⑳ AttachEntityToEntity ทำงานอย่างไร

โครงสร้างแนวคิดคือ

Object Prop
↓
Attach
↓
Ped
↓
Bone
↓
Offset + Rotation

ATTACH_ENTITY_TO_ENTITY รับ Entity ที่ต้องการ Attach, Target Entity, Bone Index และค่าตำแหน่ง/Rotation Offset.

㉑ Bone คืออะไร

Skeleton ของ Ped มี Bones หลายตำแหน่ง เช่นมือ แขน ศีรษะ และส่วนอื่นของตัวละคร

เมื่อต้อง Attach Prop จะต้องเลือก Bone ที่เหมาะสม

FiveM มี

GET_PED_BONE_INDEX

สำหรับหา Bone Index จาก Ped และ Bone ID.

㉒ Bone ID กับ Bone Index เหมือนกันไหม

ไม่ควรถือว่าเป็นสิ่งเดียวกัน

Cfx.re Documentation ที่เกี่ยวข้องกับ Bone Attachment ระบุให้ใช้ GET_PED_BONE_INDEX เพื่อแปลง Bone ID ไปเป็น Index ที่ใช้กับ Attachment.

ดังนั้นอย่าใส่ Bone ID ทุกค่าเข้า ATTACH_ENTITY_TO_ENTITY โดยตรงโดยไม่ตรวจ

㉓ ตัวอย่าง Attach Prop เข้ามือ

แนวคิด

local ped = PlayerPedId()
local bone = GetPedBoneIndex(ped, 57005)

AttachEntityToEntity(
    object,
    ped,
    bone,
    0.10,
    0.02,
    0.00,
    0.0,
    90.0,
    180.0,
    true,
    true,
    false,
    true,
    1,
    true
)

ค่าตำแหน่งและ Rotation ต้องปรับตาม Model จริง เพราะ ATTACH_ENTITY_TO_ENTITY รองรับทั้ง Bone Index และ Offsets.

㉔ ทำไม Prop อยู่ผิดตำแหน่งบนมือ

ตรวจ

Bone
X Offset
Y Offset
Z Offset
Rotation X
Rotation Y
Rotation Z

ก่อนเปลี่ยน Model

หาก Prop ติดกับมือแล้วแต่ลอยห่างออกไป แสดงว่า Attachment ทำงานอยู่ เพียง Offset ยังไม่เหมาะ

㉕ Prop กลับด้านแก้อย่างไร

ปรับ Rotation Offset

เช่น

rotX
rotY
rotZ

ใน ATTACH_ENTITY_TO_ENTITY.

Model แต่ละตัวมี Origin/Orientation ต่างกัน จึงไม่มี Rotation ชุดเดียวที่ใช้ได้กับ Props ทุกชิ้น

㉖ Prop ติดผิด Bone มีอาการอย่างไร

เช่น

โทรศัพท์ติดหัว
กล่องติดขา
กระเป๋าติดมือผิดข้าง

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

เพราะการปรับ Offset ไม่สามารถแก้ Attachment ที่เลือก Skeleton Bone ผิดตำแหน่งตั้งแต่ต้น

㉗ ใช้ GetPedBoneCoords ช่วย Debug ได้ไหม

ได้

FiveM มี GET_PED_BONE_COORDS สำหรับอ่านตำแหน่งของ Bone บน Ped.

มีประโยชน์เมื่อกำลังสร้าง Tool สำหรับดูจุด Attachment หรือ Debug Bone Placement

㉘ Prop Attach แล้วทะลุตัวผู้เล่น

ตรวจ

Position Offset
Rotation
Model Size
Collision
Animation

โดยเฉพาะ Prop ขนาดใหญ่

อาจดูปกติเมื่อยืน แต่ทะลุ Body ตอนเดินหรือเล่น Animation

จึงต้องทดสอบขณะเคลื่อนไหวด้วย

㉙ Prop กับ Animation ควรทำงานร่วมกัน

ตัวอย่าง

Animation ถือกาแฟ
+
Coffee Cup Prop

หรือ

Animation ใช้โทรศัพท์
+
Phone Prop

หาก Animation และ Attachment Offset ไม่สัมพันธ์กัน Prop จะดูเหมือนลอยหรือทะลุมือ

จึงควรออกแบบ Prop และ Animation เป็น Pair

㉚ Attach Prop แล้วต้องลบเมื่อ Animation จบไหม

ถ้า Prop ถูกสร้างมาเพื่อ Animation ชั่วคราว ควรมี Cleanup

แนวคิด

Create Prop
↓
Attach
↓
Play Animation
↓
Animation End
↓
Delete Prop

FiveM มี DELETE_OBJECT สำหรับลบ Object และ DELETE_ENTITY สำหรับลบ Entity พร้อมทำให้ Handle ที่ส่งเข้าไปไม่สามารถใช้แบบเดิมต่อได้.

㉛ DeleteObject ใช้ทำอะไร

DELETE_OBJECT

ใช้ลบ Object ที่ระบุออกจาก Game World.

จึงเหมาะกับ Prop ที่ Script สร้างขึ้นแล้วไม่ต้องการใช้อีก

㉜ DeleteEntity ใช้แทนได้ไหม

DELETE_ENTITY เป็น Native ระดับ Entity ที่สามารถลบ Entity และทำให้ Handle ที่ถูกส่งเข้าไป Invalid.

สำหรับ Object สามารถเลือก Cleanup Approach ให้สอดคล้องกับ Resource Architecture และ Ownership ของ Entity

㉝ SetEntityAsNoLongerNeeded ต่างจาก Delete อย่างไร

FiveM มี

SET_ENTITY_AS_NO_LONGER_NEEDED

ซึ่ง Mark Entity ว่า Script ไม่ต้องการใช้อีก และ Engine สามารถลบ Entity เมื่อเห็นว่าเหมาะสม.

ต่างจากการสั่ง Delete โดยตรง

㉞ Prop ชั่วคราวควรใช้แบบไหน

ถ้าต้องการให้ Object หายทันทีหลังจบ Interaction

DeleteObject / DeleteEntity

อาจเหมาะกว่า

แต่ถ้าต้องการปล่อย Ownership/Management คืนให้ Engine สามารถพิจารณา SET_ENTITY_AS_NO_LONGER_NEEDED.

㉟ Prop หายไม่หมดหลัง Resource Restart

ตรวจ Cleanup Logic

เช่น

onResourceStop
↓
วน Object Handles
↓
Delete Entity

FiveM มี Resource Lifecycle Events และ Object/Entity Delete Natives จึงควรวาง Creation/Cleanup เป็นคู่กัน ไม่ใช่สร้างอย่างเดียว.

㊱ Prop ซ้ำหลัง Restart Resource

Pattern เช่น

Start Resource
→ Create 20 Props

Restart
→ Create อีก 20

แต่ Props เดิมไม่ได้ Cleanup

จะกลายเป็น Object ซ้อนกัน

ควรเก็บ Handles หรือ Logical Object IDs และ Cleanup เมื่อ Resource Stop

㊲ Prop จำนวนมากทำให้ FPS ตกได้ไหม

Object จำนวนมากเพิ่ม Entity และ Rendering Work ใน Scene และ FiveM/OneSync ต้องจัดการ Entity State ตาม Architecture ของ Server

เอกสาร OneSync ยังเตือนว่าเมื่อมี Entities ใน Range มากกว่าที่ Client/Game รองรับได้ อาจทำให้เกิด Overload หรือ Timeout ใน Server ขนาดใหญ่มาก.

ดังนั้นไม่ควร Spawn Props จำนวนมากโดยไม่มีเหตุผลหรือการวัดผล

㊳ Decoration เล็กทุกชิ้นควรเป็น Script Prop ไหม

ไม่เสมอ

ถ้า Object เป็น Decoration ถาวรของ Map เช่น

โต๊ะ
เก้าอี้
ต้นไม้
ป้าย

จำนวนมาก อาจเหมาะกับ Map Asset/YMAP Pipeline มากกว่า Runtime Script ที่ Create Objects ทีละตัว

แต่ถ้า Object เปลี่ยนตาม Gameplay เช่นผู้เล่นวาง Barrier จึงเหมาะกับ Runtime Prop

㊴ Props แบบไหนเหมาะกับ Script

ตัวอย่าง

ตำรวจวางกรวย
ผู้เล่นถืออาหาร
เปิดกล่อง
วางกระเป๋า
Object Mission
เครื่องมือระหว่างทำงาน
Props สำหรับ Emote

เพราะต้องมี Lifecycle ตาม Gameplay

㊵ Static Props ควร Freeze หรือไม่

Object ที่ต้องอยู่ตำแหน่งเดิมอาจต้องกำหนด Physics/Entity State ให้เหมาะสมตาม Gameplay

แต่ไม่ควร Freeze Props ทุกตัวแบบเหมารวม

เช่น

Barrier
→ อาจต้องอยู่นิ่ง

ลูกบอล
→ ต้องเคลื่อนที่

ต้องออกแบบตามพฤติกรรมของ Object

㊶ Prop Networked คืออะไร

CREATE_OBJECT มี Parameter ที่เกี่ยวข้องกับ Network Object Creation ทำให้สามารถสร้าง Object สำหรับ Networking ได้ตามรูปแบบ Native.

ถ้า Prop ต้องให้ผู้เล่นหลายคนเห็น Object ตัวเดียวกัน ต้องออกแบบ Networked Entity แทน Local Visual Object

㊷ Local Prop กับ Networked Prop ต่างกันอย่างไร

Local Prop

ผู้เล่น A สร้าง
→ ใช้เฉพาะ Client A

เหมาะกับ Visual Effect บางประเภท

Networked Prop

Entity เดียว
→ ผู้เล่นหลายคนเห็นร่วมกัน

เหมาะกับ

Barrier
Mission Object
Shared Item
World Interaction

Network ID ใช้สำหรับอ้าง Entity ข้าม Machines.

㊸ Entity Handle ส่งให้ Client อื่นได้ไหม

ไม่ควร

Cfx.re ระบุว่า Entity Handle เป็นค่า Local ต่อ Client และ Entity เดียวกันสามารถมี Handle คนละค่าบนคนละเครื่องได้.

ถ้าต้องอ้าง Object ข้าม Clients หรือ Server ให้ใช้

Network ID

แทน

㊹ Network ID คืออะไรสำหรับ Prop

Network ID คือ Identifier ของ Networked Entity ที่ใช้ระหว่าง Machines และ Cfx.re ระบุว่าควรใช้ Network ID เมื่อจำเป็นต้องอ้าง Entity ระหว่าง Client หรือ Server.

แนวคิด

Object Handle
↓
Network ID
↓
ส่งผ่าน Network
↓
Client ปลายทาง
↓
แปลงกลับเป็น Local Handle

㊺ Network ID อยู่ตลอดไปไหม

ไม่

Cfx.re ระบุว่า Network ID เป็นค่าที่สามารถถูก Reuse ได้หลัง Entity เดิมหมด Lifetime แม้ในช่วงที่ Entity ยังมีชีวิต Network ID จะไม่เปลี่ยน.

ดังนั้นไม่ควรใช้ Network ID เป็น Permanent Database ID ของ Prop

㊻ Prop ถาวรควรเก็บอะไรใน Database

ควรเก็บ Logical Data เช่น

prop_id = police_barrier_001
model
x
y
z
rotation
owner
state

แล้วสร้าง Runtime Entity และ Network ID ใหม่เมื่อ Server ต้องการ

ไม่ควรเก็บ Local Entity Handle เป็น Identifier ถาวร เพราะ Handle เป็น Local Context.

㊼ OneSync สร้าง Object ฝั่ง Server ได้ไหม

ได้

Cfx.re OneSync Documentation ระบุว่าสามารถสร้าง Entities ฝั่ง Server ได้ รวมถึง

Peds
Vehicles
Objects

จึงสามารถออกแบบ Shared Props ให้ Server เป็นผู้ควบคุม Entity Creation ได้

㊽ Server-created Prop เหมาะกับอะไร

ตัวอย่างเช่น

Shared Barrier
Mission Object
Persistent Gameplay Object
Server-controlled World Item

โดยเฉพาะเมื่อ Object State ต้องเป็นแหล่งข้อมูลเดียวสำหรับผู้เล่นหลายคน

แต่ต้องออกแบบ Persistence/Ownership ให้ถูก ไม่ใช่แค่ย้าย CreateObject จาก Client ไป Server

㊾ Entity Persistence ใน OneSync ต้องคิดอะไร

Cfx.re แนะนำ SET_ENTITY_ORPHAN_MODE สำหรับ Server-created Entity ที่ต้องการป้องกันไม่ให้ Server ลบ Entity นั้นโดยอัตโนมัติในบางสถานการณ์.

ดังนั้น Shared Persistent Object ควรออกแบบ Lifecycle ชัดเจน

Create
↓
Persist
↓
Update State
↓
Delete เมื่อหมดอายุ

㊿ Prop อยู่คนละ Instance ทำไมมองไม่เห็น

ถ้า Server ใช้ Routing Buckets หรือ Instance System Object อาจไม่ได้อยู่ใน Game State เดียวกับผู้เล่น

จึงควรตรวจ Instance Architecture เพิ่มเมื่อ

Player A เห็น Prop
Player B ไม่เห็น

หลังพิสูจน์แล้วว่า Prop เป็น Networked Entity

51. Ped Prop คืออะไร

กลับมาที่ความหมายอีกแบบของคำว่า Props

FiveM มี

SET_PED_PROP_INDEX

สำหรับกำหนด Prop Variation ของ Ped โดยรับ

Ped
Prop Index
Drawable ID
Texture ID
Attach

และ Cfx.re ระบุว่า IDs เหล่านี้สัมพันธ์กับ Ped Model.

52. ตัวอย่าง Ped Props มีอะไร

โดยการใช้งาน Clothing System มักพบ Accessories เช่น

หมวก
แว่น
นาฬิกา
กำไล

ตาม Prop Slots ที่ Ped Model รองรับ

FiveM แยก Ped Props ออกจาก Drawable Components และมี Collection-based APIs สำหรับทั้งสองประเภท.

53. Ped Prop ต่างจาก Attach Object อย่างไร

นี่สำคัญมาก

Ped Prop

SET_PED_PROP_INDEX

เป็น Variation ที่มีอยู่ใน Clothing/Prop System ของ Ped

Attach Object

CREATE_OBJECT
+
ATTACH_ENTITY_TO_ENTITY

เป็นการสร้าง Object Entity จริงแล้ว Attach เข้ากับ Ped.

ตัวอย่าง

หมวก Clothing
→ Ped Prop

กล่องที่ผู้เล่นถือ
→ Attached Object Prop

54. โทรศัพท์ควรเป็น Ped Prop หรือ Attached Object

ถ้าโทรศัพท์เป็นอุปกรณ์ที่แสดงตอน Animation และต้องสร้าง/ลบตาม Interaction มักเหมาะกับ

Create Object
↓
Attach to Hand

มากกว่าการทำเป็น Clothing Prop Variation

เพราะ Lifecycle เป็น Gameplay Object ไม่ใช่ Outfit

55. หมวกควรใช้ AttachEntityToEntity ไหม

หากหมวกนั้นเป็น Clothing Prop ที่ Ped Model รองรับ ควรพิจารณา Ped Prop System ก่อน

FiveM มี SET_PED_PROP_INDEX โดยตรงสำหรับ Ped Prop Variations.

การ Create Object แล้ว Attach เป็นอีกเทคนิคหนึ่ง แต่จะมี Object Entity และ Cleanup/Networking เพิ่มเข้ามา

56. ClearPedProp คืออะไร

FiveM มี

CLEAR_PED_PROP

สำหรับ Clear Prop Slot ที่ระบุออกจาก Ped.

ตัวอย่างใช้เมื่อผู้เล่นถอด

หมวก
แว่น
Ped Prop

จาก Slot นั้น

57. Ped Props มี Collections ไหม

มี

Cfx.re ระบุว่า Ped Drawable Components และ Props ถูกจัดเก็บใน Named Collections และ Collection-based Indexes ถูกออกแบบให้คงที่หลัง GTA Title Updates.

นี่สำคัญกับ Custom Hats/Glasses เช่นเดียวกับ Custom Clothes

58. GTA Update ทำให้ Custom Ped Props เพี้ยนได้ไหม

ถ้าระบบใช้ Global Index ของ Custom Props เป็น Persistent ID ปัญหาสามารถเกิดได้

Cfx.re ระบุว่า Global Index ของ Custom Drawable Components และ Props เปลี่ยนได้หลัง Title Update ขณะที่ Collection-relative Index ยังคง Stable.

จึงควรพิจารณา Collection-based Props สำหรับระบบ Clothing ระยะยาว

59. SetPedCollectionPropIndex คืออะไร

FiveM มี

SET_PED_COLLECTION_PROP_INDEX

เป็นทางเลือกของ SET_PED_PROP_INDEX ที่ใช้ Local Collection Index แทน Global Index.

เหมาะกับ Custom Ped Props ที่ต้องการความเสถียรหลัง GTA Title Updates

60. Prop หายหลัง Animation จบเกิดจากอะไร

ต้องตรวจว่า Script ตั้งใจ

DeleteObject
Detach
ClearPedProp

หลัง Animation หรือไม่

ถ้าเป็น Attached Object อาจถูก Delete

แต่ถ้าเป็น Ped Prop อาจถูก Clear ด้วย Ped Prop API

แยกสองระบบให้ถูกก่อน Debug.

61. Prop ไม่หายหลัง Animation จบ

นี่เป็นอาการ Cleanup ไม่ครบ

ตัวอย่าง

Animation Stop
แต่ Object Handle ยังอยู่
และยัง Attach กับ Ped

ควร

Detach/Delete

ตาม Architecture

ไม่ควรปล่อย Object เก่าค้างและ Create ตัวใหม่ทุกครั้งที่เล่น Emote

62. Emote Prop ซ้ำหลายชิ้นเกิดจากอะไร

เช่นเล่น Animation 5 ครั้งแล้วได้แก้ว 5 ใบติดมือ

Root Cause มักเป็น

Create ทุกครั้ง
แต่ไม่ Cleanup ของเดิม

ควรเก็บ Object Handle ของ Active Prop และตรวจ/ลบก่อนสร้างตัวใหม่

63. Prop หายเมื่อผู้เล่นตายควรทำอย่างไร

ระบบ Emote/Inventory ควรมี Cleanup Hooks สำหรับเหตุการณ์ที่ทำให้ Interaction จบ เช่น

Death
Respawn
Character Change
Resource Stop
Cancel Emote

เพื่อไม่ให้ Attached Object ค้าง

64. Prop ค้างหลัง Disconnect

ถ้าเป็น Networked Object ที่ Server/Resource เป็นผู้ดูแล ต้องมี Lifecycle Cleanup เมื่อเจ้าของหรือ Gameplay State หาย

นี่เป็นอีกเหตุผลที่ควรแยก

Visual Local Prop

ออกจาก

Persistent Shared Prop

ตั้งแต่ Design Phase

65. Props จำนวนมากควร Optimize อย่างไร

เริ่มจาก

ลดจำนวน Objects ที่ไม่จำเป็น
หลีกเลี่ยง Duplicate Props
ใช้ Model ที่เหมาะกับระยะ
ไม่ Spawn ทุก Object ของเมืองผ่าน Script
Cleanup Entity ที่หมดอายุ
จำกัด Shared Props ตาม Gameplay

และหาก Server มี Entity Density สูง ควรวัดผลจริง ไม่ควรดูแค่จำนวน Resource Folders

66. Props ใน Map กับ Runtime Props อะไรเบากว่า

ไม่มีคำตอบเดียว

แต่ Static Decoration จำนวนมากมักเหมาะกับ Map Asset Pipeline มากกว่าการสร้างผ่าน Runtime Script ทีละ Object

ส่วน Object ที่เกิดจาก Gameplay เช่น

Barrier ที่ตำรวจวาง
กล่องที่ผู้เล่นยก
Mission Object

จำเป็นต้องมี Runtime State จึงเหมาะกับ Script Prop มากกว่า

67. ตารางสรุป FiveM Props

สิ่งที่ต้องการวิธีที่ควรพิจารณา
โต๊ะถาวรใน MLOMap/Object Asset
กรวยที่ตำรวจวางRuntime Object Prop
กล่องที่ผู้เล่นถือCreate + Attach Object
โทรศัพท์ใน AnimationAttached Object
หมวก CharacterPed Prop
แว่นPed Prop
Object ผู้เล่นทุกคนต้องเห็นNetworked Object
Decoration เฉพาะ ClientLocal Object
Persistent Shared ObjectOneSync/Server Entity Design
ลบ Object ทันทีDELETE_OBJECT / DELETE_ENTITY
ปล่อย Engine ดูแลภายหลังSET_ENTITY_AS_NO_LONGER_NEEDED

Native และ Networking ที่เกี่ยวข้องเป็นส่วนหนึ่งของ Object/Entity APIs ของ FiveM.

68. Checklist Runtime Object Prop

☐ Model ถูก
☐ Model Loaded
☐ CreateObject สำเร็จ
☐ Position ถูก
☐ Rotation ถูก
☐ Collision ถูก
☐ Local/Networked ถูก
☐ Bone ถูกถ้า Attach
☐ Offset ถูก
☐ Rotation Offset ถูก
☐ มี Cleanup
☐ ไม่มี Duplicate Object
☐ Resource Stop แล้วลบครบ

69. Checklist Ped Prop

☐ Ped Model ถูก
☐ Prop Slot ถูก
☐ Drawable ถูก
☐ Texture ถูก
☐ Collection ถูกถ้าใช้ Custom Collection
☐ Global/Local Index ไม่ปนกัน
☐ Clear Prop ได้
☐ Saved Outfit เก็บข้อมูลถูก

FiveM แยก Ped Prop Variations จาก World Objects และ Collection-based Props สามารถใช้ Local Collection Index ได้.

70. วิธี Debug Prop ไม่ขึ้นแบบเร็วที่สุด

ใช้ลำดับนี้

ขั้นที่ 1 — แยกประเภทก่อน

World Object?
หรือ
Ped Prop?

ขั้นที่ 2 — ถ้าเป็น World Object

ตรวจ Model → Load → CREATE_OBJECT.

ขั้นที่ 3 — ตรวจ Object Handle

ดูว่า Entity ถูกสร้างหรือไม่

ขั้นที่ 4 — ตรวจ Position

โดยเฉพาะ Z และความต่างระหว่าง CREATE_OBJECT กับ CREATE_OBJECT_NO_OFFSET.

ขั้นที่ 5 — ถ้า Attach กับ Player

ตรวจ GET_PED_BONE_INDEX และ ATTACH_ENTITY_TO_ENTITY.

ขั้นที่ 6 — ถ้าคนอื่นไม่เห็น

ตรวจ Local/Networked Entity และ Network ID.

ขั้นที่ 7 — ถ้า Prop ซ้ำ

ตรวจ Creation/Cleanup

ขั้นที่ 8 — ถ้าเป็น Ped Prop

ตรวจ SET_PED_PROP_INDEX.

ขั้นที่ 9 — ถ้า Custom Ped Prop เพี้ยนหลัง Update

ตรวจ Collection/Global Index.

ขั้นที่ 10 — Cleanup ให้ครบ

ใช้ Delete/Clear ตามประเภทของ Prop.

สิ่งที่ไม่ควรทำกับ FiveM Props

หลีกเลี่ยง

CreateObject ทุก Frame
ไม่เก็บ Object Handle
ไม่ลบ Prop หลังใช้งาน
ให้ทุก Client สร้าง Shared Prop ซ้ำกัน
ส่ง Local Entity Handle ไป Client อื่น
เก็บ Network ID เป็น Database ID ถาวร
Attach ทุก Prop กับ Bone เดียวกัน
ใช้ Ped Prop กับ Object Prop ปนกัน
Merge Props จำนวนมากโดยไม่ทดสอบ
Spawn Decoration ทั้งเมืองด้วย Script โดยไม่จำเป็น

โดยเฉพาะ Entity Handle และ Network ID ต้องแยกให้ชัด เพราะ Cfx.re ระบุว่า Handle เป็น Local ต่อ Client ส่วน Network ID ใช้สำหรับการอ้าง Networked Entity ข้าม Machines.

สูตรจำง่ายสำหรับ FiveM Props

ถ้าเป็นของที่อยู่ในโลกเกม
→ Object Prop

ถ้าเป็นของที่ผู้เล่นถือ
→ Object + Attach

ถ้าเป็นหมวก/แว่นใน Clothing System
→ Ped Prop

ถ้าทุกคนต้องเห็น Object เดียวกัน
→ Networked Prop

ถ้าเป็น Decoration ถาวรจำนวนมาก
→ พิจารณา Map Asset

สรุป FiveM Props คืออะไร และใช้งานอย่างไร

FiveM Props มี 2 ความหมายหลักที่ต้องแยกให้ออก

ความหมายแรกคือ Object Props ซึ่งเป็น Object Entities เช่นโต๊ะ กล่อง โทรศัพท์ ขวด หรืออุปกรณ์ประกอบ Gameplay โดยสร้างได้ด้วย

CREATE_OBJECT

หรือ

CREATE_OBJECT_NO_OFFSET

โดย CREATE_OBJECT มีพฤติกรรม Offset ตำแหน่ง Z ตาม Radius ของ Model ขณะที่ CREATE_OBJECT_NO_OFFSET วาง Center ของ Object ตรงตำแหน่งที่ระบุ.

ถ้าต้องการให้ผู้เล่นถือ Object สามารถใช้

GET_PED_BONE_INDEX
↓
ATTACH_ENTITY_TO_ENTITY

เพื่อ Attach Object เข้ากับ Bone ของ Ped พร้อมกำหนด Position และ Rotation Offsets.

เมื่อใช้งานเสร็จควร Cleanup ด้วย DELETE_OBJECT, DELETE_ENTITY หรือปล่อย Entity ด้วย SET_ENTITY_AS_NO_LONGER_NEEDED ตาม Lifecycle ที่ต้องการ.

ความหมายที่สองคือ Ped Props เช่นหมวกและ Accessories ในระบบ Character ซึ่งใช้

SET_PED_PROP_INDEX

และสามารถลบออกด้วย

CLEAR_PED_PROP

โดย Ped Prop IDs จะสัมพันธ์กับ Ped Model.

สำหรับ Custom Ped Props FiveM ยังมี Collection-based APIs และ SET_PED_COLLECTION_PROP_INDEX ซึ่งใช้ Local Collection Index แทน Global Index โดย Cfx.re ระบุว่า Collection-relative indexes มีความเสถียรหลัง GTA Title Updates มากกว่า Global Custom Index.

ถ้า Prop ผู้เล่นถืออยู่ผิดตำแหน่ง ให้ตรวจ Bone และ Offset

ถ้า Prop กลับด้าน ให้แก้ Rotation Offset

ถ้า Prop ซ้ำทุกครั้งที่เล่น Emote ให้ตรวจ Cleanup

ถ้า ผู้เล่นคนอื่นไม่เห็น Object ให้ตรวจ Local/Networked Entity และ Network ID

ถ้า หมวกหรือแว่น Custom เปลี่ยนตัวหลัง GTA Update ให้ตรวจ Global Index/Collection

และถ้า มี Decoration จำนวนมากที่ไม่เคยเปลี่ยนตาม Gameplay ควรพิจารณาว่าสิ่งเหล่านั้นควรอยู่ใน Map Asset Pipeline มากกว่าถูกสร้างเป็น Runtime Objects ทีละชิ้น

แนวทางของ comsiam คือแยก Props เป็น World Object, Attached Object และ Ped Prop ตั้งแต่เริ่มออกแบบ เพราะทั้งสามแบบอาจดูเหมือน “ของประกอบตัวละครหรือฉาก” เหมือนกัน แต่ใช้ Native, Networking และ Cleanup คนละวิธี การเลือกประเภทให้ถูกตั้งแต่ต้นจะลดทั้ง Object ซ้ำ ปัญหา Sync และ Entity ที่ค้างอยู่ใน Server ได้มาก

Comments

Popular posts from this blog

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

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

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