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 เป็น 0Coordinates / Asset / Engine Interior
ผู้เล่นอยู่นอก InteriorGetInteriorFromEntity
หา 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

Popular posts from this blog

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

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

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