FiveM Interior คืออะไร ต่างจาก MLO, IPL และ Teleport Interior อย่างไร
คำว่า FiveM Interior หมายถึงพื้นที่ภายในอาคารหรือพื้นที่ที่ระบบ GTA V/FiveM รับรู้ว่าเป็น Interior ซึ่งอาจประกอบด้วย Room, Interior ID, Entity Sets และองค์ประกอบอื่นที่เกี่ยวข้องกับการแสดงผลพื้นที่ภายใน
FiveM มี Native สำหรับตรวจ Interior โดยตรง เช่น GET_INTERIOR_AT_COORDS() ซึ่งคืน Interior ID จากพิกัดและคืนค่า 0 เมื่อพิกัดอยู่นอก Interior รวมถึง GET_INTERIOR_FROM_ENTITY() ที่ตรวจว่า Entity เช่นผู้เล่นอยู่ใน Interior ใด
Interior จึงไม่ใช่เพียง “ห้องที่มีหลังคา” แต่เป็นส่วนหนึ่งของระบบ Game Engine ที่สามารถมี Interior ID, Rooms และ Entity Sets ให้ Script ตรวจสอบหรือเปลี่ยนสถานะได้
บทความนี้จาก comsiam จะอธิบาย FiveM Interior ตั้งแต่พื้นฐาน ไปจนถึงความแตกต่างระหว่าง Interior, MLO, IPL และห้องแบบ Teleport รวมถึงวิธีตรวจเมื่อ Interior ไม่ขึ้น ของในห้องหาย หรือผู้เล่นตกพื้น
FiveM Interior คืออะไร
FiveM Interior คือพื้นที่ภายในที่ GTA V/FiveM สามารถระบุและจัดการในระบบ Interior ของเกม
ตัวอย่างเช่น
Apartment
Office
Police Station
Hospital
Garage
Club
Casino
Warehouse
House
Mission Interior
FiveM สามารถตรวจ Interior จาก Coordinates หรือ Entity ผ่าน Native ของเกมได้โดยตรง
① Interior ID คืออะไร
Interior แต่ละพื้นที่ที่ Engine รับรู้สามารถมี Interior ID ซึ่งใช้เป็น Handle สำหรับเรียก Native ที่เกี่ยวข้องกับ Interior นั้น
ตัวอย่าง
local interior = GetInteriorAtCoords(x, y, z)
GET_INTERIOR_AT_COORDS จะคืน Interior ID ของพิกัดที่กำหนด และคืน 0 หากพิกัดนั้นอยู่นอก Interior
ดังนั้นสามารถใช้
if interior ~= 0 then
print("อยู่ใน Interior")
end
เพื่อช่วย Debug ระบบได้
② ตรวจว่าผู้เล่นอยู่ Interior ไหนได้ไหม
ได้
ใช้
local ped = PlayerPedId()
local interior = GetInteriorFromEntity(ped)
FiveM ระบุว่า GET_INTERIOR_FROM_ENTITY จะคืน Handle ของ Interior ที่ Entity อยู่ และคืน 0 เมื่ออยู่ภายนอก
จึงเหมาะกับระบบ เช่น
ตรวจว่าผู้เล่นเข้าตึกหรือยัง
เปิดระบบเฉพาะใน Interior
Debug MLO
ตรวจ Room
เปลี่ยน Effect ตามพื้นที่
③ GetInteriorAtCoords ต่างจาก GetInteriorFromEntity อย่างไร
สอง Native นี้ใช้คนละสถานการณ์
GetInteriorAtCoords
GetInteriorAtCoords(x, y, z)
ค้นหา Interior จาก ตำแหน่ง
GetInteriorFromEntity
GetInteriorFromEntity(entity)
ค้นหา Interior จาก Entity ที่กำลังอยู่ในพื้นที่
เช่น ถ้าต้องการเช็ก Player ปัจจุบัน การใช้ Entity มักสะดวกกว่า
④ ตัวอย่างตรวจ Interior ของผู้เล่น
CreateThread(function()
local ped = PlayerPedId()
local interior = GetInteriorFromEntity(ped)
print("Interior ID:", interior)
end)
ถ้าได้
0
หมายถึง Entity อยู่นอก Interior ตามพฤติกรรมที่ Native Reference ระบุไว้
⑤ FiveM Interior ต่างจาก MLO อย่างไร
คำว่า Interior กว้างกว่า MLO
Interior
คือแนวคิดของพื้นที่ภายในที่ Game Engine รับรู้
MLO
เป็นรูปแบบหนึ่งของ Custom Interior Asset ที่ผู้สร้าง FiveM/GTA V ใช้สร้างพื้นที่ภายในแบบมีโครงสร้าง เช่น Rooms และ Portals
ดังนั้นสามารถเข้าใจได้ว่า
Interior
├── GTA V Interior เดิม
├── DLC Interior
└── Custom MLO Interior
แต่ Interior ทุกตัวไม่จำเป็นต้องเป็น Custom MLO
⑥ Interior ต่างจาก Teleport Interior อย่างไร
Teleport Interior คือ Gameplay Design ที่ Script ย้ายผู้เล่นจากจุดหนึ่งไปอีก Coordinates หนึ่ง
เช่น
หน้าบ้าน
↓
กด E
↓
Teleport
↓
ห้องอีกตำแหน่ง
ตัวห้องที่ถูก Teleport ไปอาจเป็น Interior ที่ Engine รับรู้ หรืออาจเป็นเพียง Shell/Model ในพื้นที่อื่นก็ได้ ขึ้นอยู่กับวิธีสร้าง Asset
ดังนั้น
Teleport
เป็น วิธีเข้าออก
ไม่ใช่ชนิดของ Interior โดยตัวมันเอง
⑦ Shell Interior คืออะไร
Shell มักหมายถึง Model ห้องสำเร็จรูปที่ถูกวางไว้ในพื้นที่หนึ่งแล้วใช้ Script Teleport ผู้เล่นเข้าไป
ตัวอย่าง
บ้าน A
บ้าน B
บ้าน C
↓
Teleport
↓
Housing Shell
Shell บางแบบอาจไม่ได้มี Interior Structure แบบเดียวกับ GTA Interior/MLO ดังนั้นไม่ควรเหมารวมว่า Shell ทุกตัวจะคืน Interior ID แบบเดียวกัน
ควรตรวจจริงด้วย GetInteriorFromEntity() หรือ GetInteriorAtCoords() เมื่อต้องการทราบสถานะ Engine Interior
⑧ Interior ต่างจาก IPL อย่างไร
IPL และ Interior ไม่ใช่สิ่งเดียวกัน
Interior
คือพื้นที่ภายในที่ Engine จัดการ
IPL
เป็น World/Map Content ที่สามารถ Request หรือ Remove ตามชื่อผ่าน Native
Interior บางแห่งอาจต้องมี IPL ที่เกี่ยวข้องถูกโหลดก่อน แต่ไม่ได้หมายความว่า Interior ทุกตัว = IPL
ดังนั้นควรแยก
IPL → World Content State
Interior → พื้นที่ภายในของ Engine
⑨ Interior ต่างจาก YMAP อย่างไร
YMAP ใช้กับการวาง Map Entities
ส่วน Interior เป็นระบบพื้นที่ภายใน
Custom MLO อาจใช้ YMAP และ Asset อื่นเพื่อวาง Content ของ Interior แต่
YMAP
≠
Interior
โดยตรง
YMAP เป็นส่วนหนึ่งของ Map Asset Pipeline ขณะที่ Interior มี Native และ Interior ID สำหรับจัดการพื้นที่ภายในโดยเฉพาะ
⑩ Room ใน Interior คืออะไร
Interior สามารถแบ่งออกเป็น Rooms
FiveM มี Native
GetRoomKeyFromEntity(entity)
สำหรับดึง Room Hash Key ของห้องที่ Entity กำลังอยู่ และ Documentation ระบุว่าแต่ละ Room ใน Interior มี Key ของตัวเอง โดยจะคืน 0 เมื่อ Entity อยู่ภายนอก
ตัวอย่าง
Police Interior
├── Lobby
├── Office
├── Locker
├── Armory
└── Cells
แต่ละพื้นที่สามารถถูกจัดเป็น Room ตาม Interior Structure
⑪ วิธีดู Room ที่ผู้เล่นอยู่
ตัวอย่าง
local ped = PlayerPedId()
local interior = GetInteriorFromEntity(ped)
local room = GetRoomKeyFromEntity(ped)
print("Interior:", interior)
print("Room:", room)
FiveM มีทั้ง Native สำหรับ Interior Handle และ Room Key จึงสามารถใช้สองค่าร่วมกันในการ Debug Interior ได้
⑫ Room Key คือชื่อห้องหรือไม่
Room Key เป็น Hash Key ที่ Engine ใช้ ไม่ควรคิดว่าเป็นข้อความ เช่น
Lobby
โดยตรง
FiveM Documentation ระบุว่า GET_ROOM_KEY_FROM_ENTITY คืน Room Hash Key ของ Room ที่ Entity อยู่
ดังนั้นหากต้องการแสดงชื่อห้องให้ผู้ดูแลอ่านง่าย อาจต้องมี Mapping ของระบบเอง
⑬ Room สำคัญกับ MLO อย่างไร
MLO Interior มักมีการแบ่ง Room เพื่อช่วยกำหนดโครงสร้างพื้นที่ภายใน
ตัวอย่าง
Lobby
↓
Hall
↓
Office
↓
Storage
หาก Room Configuration หรือการเชื่อมระหว่างพื้นที่ผิด อาจเกิดอาการด้าน Visibility หรือ Interior Behavior ที่ผิดตามตำแหน่งผู้เล่น
FiveM มี Native ที่สามารถอ่าน Room Key ของ Entity ได้ จึงช่วยตรวจว่า Engine มองผู้เล่นว่าอยู่ Room ใดจริง
⑭ Portal คืออะไร
ใน Interior/MLO Context Portal ใช้เชื่อมพื้นที่หรือ Rooms เข้าด้วยกัน เช่นช่องประตูระหว่างสองห้อง
แนวคิดคือ
Room A
↓
Portal
↓
Room B
FiveM Interior Native Set มี APIs ที่เกี่ยวข้องกับ Room และ Portal Data ทำให้ Room/Portal เป็นส่วนหนึ่งของ Interior System มากกว่าเป็นเพียง Visual Door Model
⑮ Portal ไม่ใช่ Door Model
ต้องแยกให้ชัด
Portal
≠
ประตูที่มองเห็น
Door Model เป็น Visual/Physical Asset
ส่วน Portal เป็นส่วนของ Interior Structure
ดังนั้นสามารถเกิด
ประตูขึ้น
แต่ Interior Visibility ผิด
หรือ
ไม่มีประตู Model
แต่ Room Transition ยังทำงาน
ได้
⑯ Interior Entity Set คืออะไร
Interior บางแห่งมี Entity Sets ซึ่งเป็นชุด Entity ที่สามารถเปิดหรือปิดตามชื่อ
FiveM มี Native
ActivateInteriorEntitySet(interior, "entity_set_name")
โดย Native รับ Interior ID และชื่อ Entity Set ที่ต้องการ Activate
จึงสามารถใช้เปลี่ยนองค์ประกอบภายในบาง Interior ได้
⑰ Entity Set ใช้ทำอะไร
สามารถใช้กับ Interior ที่มี Content Variant เช่น
Furniture
Decorations
Equipment
Props
Interior State บางส่วน
ขึ้นอยู่กับ Entity Sets ที่ Interior นั้นมีอยู่
Native ACTIVATE_INTERIOR_ENTITY_SET ทำงานด้วยชื่อ Entity Set โดยตรง ดังนั้นต้องรู้ชื่อ Set ที่ Interior รองรับ ไม่สามารถตั้งชื่ออะไรก็ได้แล้วให้ Game สร้างของขึ้นมาเอง
⑱ วิธี Activate Entity Set
ตัวอย่างพื้นฐาน
local interior = GetInteriorAtCoords(x, y, z)
if interior ~= 0 then
ActivateInteriorEntitySet(interior, "entity_set_name")
RefreshInterior(interior)
end
FiveM มี Native ทั้ง ACTIVATE_INTERIOR_ENTITY_SET และ REFRESH_INTERIOR สำหรับ Interior ฝั่ง Client
⑲ Deactivate Entity Set ได้ไหม
ได้
FiveM มี DEACTIVATE_INTERIOR_ENTITY_SET สำหรับปิด Entity Set ที่ระบุของ Interior
แนวคิดคือ
DeactivateInteriorEntitySet(interior, "entity_set_name")
RefreshInterior(interior)
จึงสามารถใช้เปลี่ยน Interior จาก State หนึ่งไปอีก State หนึ่งได้ตาม Entity Sets ที่มีอยู่
⑳ RefreshInterior คืออะไร
FiveM มี Native
RefreshInterior(interiorId)
สำหรับ Refresh Interior ตาม Interior ID
มักใช้หลังเปลี่ยน Interior State เช่น Entity Sets เพื่อให้การเปลี่ยนแปลงถูกนำไปใช้กับ Interior ตาม Workflow ของ Script
㉑ Activate แล้วของไม่ขึ้น ควร Refresh ไหม
ถ้า Entity Set ที่ถูกต้องถูก Activate แล้ว แต่ Interior ยังไม่ Update การ RefreshInterior() เป็นหนึ่งในจุดที่ควรตรวจ เพราะ FiveM มี Native นี้โดยตรงสำหรับ Interior ID
แต่หาก Entity Set Name ผิด การ Refresh ซ้ำก็ไม่สามารถสร้าง Set ที่ไม่มีอยู่ได้
㉒ Interior Ready คืออะไร
FiveM มี Native
IsInteriorReady(interior)
สำหรับตรวจ Ready State ของ Interior
จึงสามารถใช้ก่อนทำงานบางอย่างกับ Interior แทนการสมมติว่า Interior พร้อมทันทีหลังค้นพบ Interior ID
㉓ ตัวอย่างรอ Interior Ready
local interior = GetInteriorAtCoords(x, y, z)
if interior ~= 0 then
while not IsInteriorReady(interior) do
Wait(0)
end
print("Interior ready")
end
FiveM มีทั้ง GET_INTERIOR_AT_COORDS และ IS_INTERIOR_READY สำหรับค้นหาและตรวจสถานะ Interior
ควรหลีกเลี่ยง Loop ที่ไม่มีทางออกใน Production Code หาก Coordinates หรือ Interior ไม่ถูกต้อง
㉔ PinInteriorInMemory คืออะไร
FiveM มี Native
PinInteriorInMemory(interior)
สำหรับ Interior ID
และยังมี
UnpinInterior(interior)
เป็น Native คู่กัน
การใช้ควรทำเฉพาะกรณีที่เข้าใจว่า Resource ต้องการควบคุม Interior Loading/Memory State อย่างไร ไม่ควร Pin Interior ทั้งเมืองไว้ตลอดเวลาแบบสุ่ม
㉕ UnpinInterior คืออะไร
ใช้ยกเลิกการ Pin Interior ที่ถูก Pin ไว้
UnpinInterior(interior)
FiveM Native Reference มีทั้ง PIN_INTERIOR_IN_MEMORY และ UNPIN_INTERIOR ใน Interior API
หาก Script Pin Interior ตาม Event ควรออกแบบ Cleanup ให้เหมาะสมด้วย
㉖ ForceRoomForEntity คืออะไร
FiveM มี Native
ForceRoomForEntity(entity, interior, roomHash)
และ Documentation ระบุว่าใช้ Force Room ของ Interior ให้โหลดในกรณีที่ Entity ไม่ได้เข้า Interior ผ่าน Portal ตามปกติ เช่นการ Teleport เข้าไป
นี่เป็นจุดสำคัญสำหรับ Teleport Interior
㉗ ทำไม Teleport เข้า Interior แล้วห้องไม่โหลด
เพราะการ Teleport อาจข้ามการเดินผ่าน Portal ตามธรรมชาติของ Interior
FiveM Documentation ของ FORCE_ROOM_FOR_ENTITY ระบุโดยตรงว่า Native นี้ใช้บังคับ Room ให้โหลดในกรณีที่ไม่ได้ Teleport ผ่าน Portal ตามปกติ
ดังนั้นถ้า
เดินเข้าประตู → ปกติ
Teleport เข้า → ห้องหาย
Room Assignment เป็นจุดสำคัญที่ควรตรวจ
㉘ Teleport เข้า Interior แล้วของหาย
ให้แยกตรวจ
Interior ID
Room Key
Interior Ready
Entity Set
Force Room
Resource Assets
ตัวอย่าง Debug
local ped = PlayerPedId()
print(GetInteriorFromEntity(ped))
print(GetRoomKeyFromEntity(ped))
ถ้าค่าต่างจากตอนเดินเข้า Interior ตามปกติ จะได้เบาะแสว่าปัญหาเกี่ยวข้องกับ Interior/Room State
㉙ Interior ID เป็น 0 ทั้งที่อยู่ในห้อง
หาก GetInteriorFromEntity() คืน 0 FiveM ถือว่า Entity นั้นอยู่นอก Interior ตาม Native Reference
กรณีนี้อาจหมายถึงว่าห้องที่คุณเรียกว่า “Interior” เป็นเพียง Shell/Map Geometry ที่ไม่ได้ถูก Engine รับรู้เป็น Interior ในรูปแบบเดียวกัน
นี่เป็นอีกเหตุผลที่ไม่ควรใช้คำว่า Interior ในเชิงภาพกับ Engine Interior ปะปนกัน
㉚ GetInteriorAtCoords คืน 0 หมายความว่าอะไร
Cfx.re ระบุว่า GET_INTERIOR_AT_COORDS จะคืน 0 เมื่อ Coordinates อยู่ด้านนอก
ดังนั้นถ้าใช้ Coordinates ของ MLO แล้วได้ 0
ควรตรวจ
Coordinates ถูกหรือไม่
Interior Asset โหลดแล้วหรือไม่
พื้นที่นั้นเป็น Engine Interior จริงหรือไม่
MLO/Resource ทำงานหรือไม่
ก่อนเขียน Script ต่อ
㉛ ตรวจ Interior จาก Player ดีกว่าพิกัดไหม
ขึ้นอยู่กับงาน
ต้องการรู้ Interior ที่ผู้เล่นอยู่จริง
ใช้
GetInteriorFromEntity(PlayerPedId())
ต้องการหา Interior ของ Location ที่ยังไม่มีผู้เล่น
ใช้
GetInteriorAtCoords(x, y, z)
ทั้งสอง Native ถูกออกแบบให้ใช้คนละลักษณะและคืน Interior Handle/ID ตาม Target ที่กำหนด
㉜ Interior Group คืออะไร
FiveM มี Native
GetInteriorGroupId(interior)
ซึ่งคืน Group ID ของ Interior โดย Documentation ยกตัวอย่างว่า Regular Interiors ใช้ Group 0 และ Subway Interiors ใช้ Group 1 พร้อมระบุว่ายังมีกลุ่มอื่นอีก
ผู้เล่นทั่วไปแทบไม่จำเป็นต้องใช้ แต่เป็นข้อมูลที่มีประโยชน์สำหรับ Developer ที่ทำระบบ Interior ระดับลึก
㉝ Interior Heading ดูได้ไหม
ได้
FiveM มี Native
GetInteriorHeading(interior)
และ Documentation ระบุว่าค่าที่คืนเป็น Radians ซึ่งสามารถแปลงเป็น Degrees ได้ด้วย 180 / π
จึงสามารถใช้เมื่อ Script ต้องรู้ Orientation ของ Interior
㉞ DisableInterior คืออะไร
FiveM มี Native
DisableInterior(interiorId, true)
สำหรับ Disable Interior และ Native Documentation ยกตัวอย่างว่าการ Disable Interior หนึ่งสามารถทำให้พื้นที่ Interior หายจนผู้เล่นตกเมื่อพยายามเดินเข้าไปได้
ดังนั้น Native นี้ไม่ควรถูกใช้แบบสุ่มใน Production Server
㉟ Interior หายทั้งห้องหลังติดตั้ง Script ใหม่
ค้นหาใน Resource ใหม่ว่าใช้
DisableInterior
หรือ
RemoveIpl
หรือไม่
เพราะ Interior State สามารถถูกเปลี่ยนผ่าน Native และ World Content State จาก Script ได้
การปิด Resource ใหม่แล้วทดสอบซ้ำเป็นวิธี Isolation ที่เร็วกว่าแก้ MLO Asset ทันที
㊱ Interior ขึ้น แต่ Furniture หาย
ให้ตรวจว่า Furniture เป็น
Static Map Entity
MLO Entity
Interior Entity Set
Script-created Object
แบบใด
ถ้าเป็น Entity Set ให้ตรวจ
ActivateInteriorEntitySet(interior, "set_name")
RefreshInterior(interior)
เพราะ FiveM มี Native สำหรับเปิด Entity Set และ Refresh Interior โดยตรง
㊲ Furniture ขึ้นสองชุดซ้อนกัน
อาจเกิดจากเปิด Entity Sets ที่ไม่ควรทำงานพร้อมกัน
ตัวอย่างเชิงแนวคิด
Furniture Style A
+
Furniture Style B
=
ของซ้อนกัน
ถ้า Interior มี Variants หลายแบบ ควร Deactivate Set ที่ไม่ต้องการก่อน Activate Set ใหม่ โดย FiveM มี Native สำหรับทั้ง Activate และ Deactivate Entity Set
㊳ ตัวอย่างสลับ Entity Set
local interior = GetInteriorAtCoords(x, y, z)
if interior ~= 0 then
DeactivateInteriorEntitySet(interior, "style_a")
ActivateInteriorEntitySet(interior, "style_b")
RefreshInterior(interior)
end
API ที่เกี่ยวข้องมีอยู่ใน FiveM Interior Natives โดยตรง
ต้องใช้ชื่อ Entity Set ที่ Interior นั้นรองรับจริง
㊴ Interior Entity Set ไม่เหมือน YMAP Props
ใช่
YMAP Props เป็น Map Entities ที่ Stream/วางผ่าน Map Asset
ส่วน Interior Entity Set เป็นชุด Entity ที่ Engine Interior สามารถ Activate/Deactivate ตามชื่อผ่าน Native
ดังนั้นของหายภายใน Interior ไม่ได้หมายความว่า YMAP เสียเสมอไป
㊵ Interior โหลดช้าเกิดจากอะไร
ต้องแยก
Interior State ยังไม่ Ready
ตรวจ
IsInteriorReady(interior)
Model/Texture ค่อยโหลด
ตรวจ Streaming Assets, YDR/YTD และ Client Memory
เข้าโดย Teleport แล้ว Room ผิด
ตรวจ ForceRoomForEntity และ Room Key
ของตกแต่งหาย
ตรวจ Entity Sets
㊶ Interior โหลดช้าไม่ใช่อินเทอร์เน็ตเสมอไป
เมื่อ Resource Assets พร้อมอยู่ใน Client แล้ว Interior ยังมี State, Rooms และ Streaming ของตัวเอง
ดังนั้นอาการ
Teleport เข้า
↓
ห้องค่อยขึ้น
อาจต้องตรวจ Interior Ready/Room Assignment รวมถึง Assets มากกว่ามอง Ping เพียงค่าเดียว
FiveM มี Native สำหรับเช็ก Interior Ready และ Room ของ Entity โดยตรง
㊷ Interior FPS ตกเกิดจากอะไร
Interior ที่หนักอาจมี
Geometry จำนวนมาก
Texture ใหญ่
Furniture มาก
Materials มาก
Props จำนวนมาก
Lighting/Effects
Script Interaction
Interior ID หรือ Room Key เองไม่ใช่ตัวชี้ Performance
ควรแยก Engine Interior State ออกจาก Asset Complexity
㊸ MLO Interior FPS ตก ควรแก้อะไรก่อน
เริ่มจาก Asset
YDR
YTD
Props
Collision
และ Map/MLO Optimization
จากนั้นตรวจ Scripts เช่น
Door
Target
Lighting
Interaction
อย่าแก้ Room Key เพียงเพราะ FPS ต่ำ หาก Room/Portal Behavior ไม่มีอาการผิด
㊹ Interior เดินทะลุพื้นเกี่ยวกับ Interior ID ไหม
โดยทั่วไปอาการเดินทะลุหรือตกพื้นควรตรวจ Collision เป็นอันดับต้น ๆ
แต่ถ้า Interior ถูก DisableInterior() ก็สามารถเกิดสถานการณ์ที่ Interior หายและผู้เล่นตกได้ตามตัวอย่างใน FiveM Native Documentation
ดังนั้นให้ตรวจทั้ง
Collision
+
Interior State
เมื่อ Visual Interior หายพร้อม Collision
㊺ Interior มองเห็นแต่ Collision หาย
ถ้า Model/Texture ขึ้นครบแต่เดินทะลุ ให้เน้น
YBN
Embedded Collision
มากกว่า Interior Entity Set
Entity Sets ใช้เปลี่ยนชุด Entities ขณะที่ Collision Asset เป็นอีก Layer ของ Map Content
㊻ Interior หายหลัง Restart Resource
ถ้าเกิดหลัง Restart Resource ให้ตรวจว่า Resource มี Initialization Logic เช่น
RequestIpl
ActivateInteriorEntitySet
DisableInterior
PinInteriorInMemory
หรือไม่
เพราะ Resource Restart สามารถทำให้ Client Script เริ่มทำงานใหม่และตั้ง Interior State ใหม่ได้
FiveM มี Native เหล่านี้สำหรับควบคุม Interior State โดยตรง
㊼ Interior Entity Set หายหลัง Restart
ถ้า Resource เป็นผู้ Activate Set ตอน Startup ต้องแน่ใจว่า Code นั้นทำงานหลัง Restart และได้ Interior ID ที่ถูกต้อง
ตัวอย่าง
local interior = GetInteriorAtCoords(x, y, z)
if interior ~= 0 and IsInteriorReady(interior) then
ActivateInteriorEntitySet(interior, "set_name")
RefreshInterior(interior)
end
Native ทั้งหมดในตัวอย่างมีอยู่ใน FiveM Interior API
㊽ Interior Script ต้องใช้ ESX หรือ QBCore ไหม
ไม่จำเป็นสำหรับการใช้ Interior Natives
เช่น
GetInteriorFromEntity
GetRoomKeyFromEntity
ActivateInteriorEntitySet
RefreshInterior
เป็น Native/API ของ GTA V/FiveM ไม่ใช่ Function ของ ESX หรือ QBCore
Framework จะเกี่ยวข้องเมื่อเพิ่ม Gameplay Logic เช่น Job, Stash หรือ Door Permission
㊾ Interior ต้องใช้ OneSync ไหม
การอ่าน Interior ID หรือ Room Key ฝั่ง Clientไม่ได้หมายความว่าต้องใช้ OneSync โดยอัตโนมัติ
OneSync เป็นระบบ Synchronization/Networking ของ FiveM ขณะที่ Interior API มี Client Natives ของตัวเองสำหรับตรวจ Interior และ Room
ต้องดู Gameplay Feature ที่คุณสร้างว่าต้อง Sync State ระหว่างผู้เล่นหรือไม่
㊿ วิธี Debug FiveM Interior แบบเร็วที่สุด
ใช้ลำดับนี้
ขั้นที่ 1 — ตรวจ Interior ID
local ped = PlayerPedId()
print(GetInteriorFromEntity(ped))
ถ้าได้ 0 Engine มองว่า Entity อยู่ภายนอก
ขั้นที่ 2 — ตรวจจาก Coordinates
print(GetInteriorAtCoords(x, y, z))
ถ้า Coordinates อยู่นอก Interior จะคืน 0
ขั้นที่ 3 — ตรวจ Room
print(GetRoomKeyFromEntity(PlayerPedId()))
Room Key จะคืน 0 เมื่ออยู่นอก Room/Interior ตาม Documentation
ขั้นที่ 4 — ตรวจ Interior Ready
print(IsInteriorReady(interior))
ขั้นที่ 5 — ตรวจ Entity Sets
ดูว่า Resource มี
ActivateInteriorEntitySet
DeactivateInteriorEntitySet
หรือไม่
ขั้นที่ 6 — Refresh Interior
ถ้าเพิ่งเปลี่ยน Interior Entity Set ให้ตรวจ
RefreshInterior(interior)
ขั้นที่ 7 — ถ้า Teleport เข้าแล้วห้องหาย
ตรวจ
ForceRoomForEntity
เพราะ Native นี้ใช้กับกรณีที่ Entity ไม่ได้เข้า Room ผ่าน Portal ตามปกติ
ขั้นที่ 8 — ตรวจ Resource Conflict
ปิด MLO/Interior Resources อื่นในตำแหน่งเดียวกัน
ขั้นที่ 9 — ตรวจ IPL
ถ้า Interior ต้องใช้ World Content ที่เกี่ยวข้อง
ขั้นที่ 10 — ตรวจ Collision
ถ้าเดินทะลุหรือตกพื้น
ตารางสรุปปัญหา FiveM Interior
| อาการ | จุดที่ควรตรวจ |
|---|---|
| Interior ID เป็น 0 | Coordinates / Asset / Engine Interior |
| ผู้เล่นอยู่นอก Interior | GetInteriorFromEntity |
| หา Interior จากตำแหน่งไม่ได้ | GetInteriorAtCoords |
| Room Key เป็น 0 | อยู่ Outside / Room State |
| Teleport แล้วห้องหาย | ForceRoomForEntity / Room |
| Interior ยังโหลดไม่พร้อม | IsInteriorReady |
| Furniture หาย | Interior Entity Set |
| Furniture ซ้อน | Entity Sets หลายชุด |
| เปลี่ยน Entity Set แล้วไม่เปลี่ยน | RefreshInterior |
| Restart แล้วของหาย | Startup Interior Logic |
| Interior ทั้งตัวหาย | Resource / IPL / DisableInterior |
| Interior ขึ้นแต่ Texture ขาว | YTD / Material |
| Interior ขึ้นแต่เดินทะลุ | Collision |
| MLO สองตัวซ้อน | Resource Conflict |
| FPS ต่ำ | Model / Texture / Props / Script |
Interior กับ MLO ต่างกันตรงไหนแบบสั้นที่สุด
จำแบบนี้
Interior
= ระบบพื้นที่ภายในของ GTA V/FiveM
MLO
= Custom Interior Asset รูปแบบหนึ่ง
IPL
= World Content State ที่ Request/Remove ได้
YMAP
= Map Entity Placement
Shell
= Model ห้องที่มักใช้ร่วมกับ Teleport
จึงไม่ควรใช้คำเหล่านี้แทนกันทั้งหมด
FiveM Interior ที่ดีควรมีอะไร
หากเป็น Custom Interior/MLO ควรตรวจอย่างน้อย
Interior Structure ถูกต้อง
Rooms ถูกต้อง
Portal ทำงานเหมาะสม
Collision ครบ
Texture ครบ
Furniture/Entity Sets ถูก
ไม่มี Map Conflict
Teleport เข้าแล้ว Room ถูก
Script Startup ตั้ง State ถูก
FPS อยู่ในระดับเหมาะสม
FiveM มี Natives สำหรับตรวจ Interior ID, Room, Ready State และ Entity Sets โดยตรง ทำให้ Server Developer สามารถ Debug Interior State แยกจาก Asset Problem ได้ชัดเจน
อย่าใช้ Interior Native ทุกตัวโดยไม่จำเป็น
ถ้า MLO ทำงานอยู่แล้ว อย่าเพิ่ม
PinInteriorInMemory
ForceRoomForEntity
DisableInterior
RefreshInterior
ทั้งหมดเพียงเพราะคิดว่าจะทำให้โหลดเร็วขึ้น
แต่ละ Native มีหน้าที่เฉพาะของมัน และบางตัว เช่น DISABLE_INTERIOR สามารถทำให้ Interior หายจนผู้เล่นตกได้ตาม Cfx.re Documentation
ให้ใช้เฉพาะเมื่ออาการและ Resource Design ต้องการจริง
สรุป FiveM Interior คืออะไร
FiveM Interior คือพื้นที่ภายในที่ GTA V/FiveM Engine สามารถระบุและจัดการผ่าน Interior ID โดย Interior สามารถมี Rooms และ Entity Sets รวมถึง State ต่าง ๆ ที่ Script ควบคุมได้
FiveM มี Native สำคัญ เช่น
GetInteriorAtCoords(x, y, z)
GetInteriorFromEntity(entity)
GetRoomKeyFromEntity(entity)
IsInteriorReady(interior)
ActivateInteriorEntitySet(interior, setName)
DeactivateInteriorEntitySet(interior, setName)
RefreshInterior(interior)
ซึ่งครอบคลุมตั้งแต่การหา Interior ID, ตรวจ Room, เช็ก Ready State ไปจนถึงเปิดและปิด Entity Sets
หาก Interior ID เป็น 0 ให้ตรวจ Coordinates และว่า Asset นั้นเป็น Engine Interior จริงหรือไม่
หาก Teleport เข้าแล้วห้องหาย ให้ตรวจ Room และ ForceRoomForEntity เพราะ FiveM ระบุ Native นี้ไว้สำหรับกรณีที่ Entity ไม่ได้เข้า Room ผ่าน Portal ตามปกติ
หาก Furniture หาย ให้ตรวจ Entity Sets
หาก เดินทะลุ ให้ตรวจ Collision
หาก Model หรือ Texture หาย ให้กลับไปตรวจ YDR/YTD/YTYP/YMAP ตามอาการ
และหาก Interior หายหลังเพิ่ม Resource ใหม่ ให้ตรวจ IPL, DisableInterior และ Resource Conflict ก่อนรื้อ MLO
แนวทางของ comsiam คือแยกคำว่า Interior ออกจาก MLO, IPL, YMAP และ Shell ให้ชัด เพราะเมื่อรู้ว่า Engine Interior มี Interior ID, Room และ Entity Set ของตัวเอง การแก้ปัญหา Interior ไม่ขึ้นหรือ Teleport แล้วห้องหายจะตรงจุดกว่าการแก้ Map Files แบบสุ่ม
Comments
Post a Comment