วิธีเพิ่ม Blip ใน FiveM ตั้งแต่พื้นฐานจนถึง Blip ร้านค้า งาน GPS และ Entity

การ เพิ่ม Blip ใน FiveM คือการเพิ่มไอคอนหรือตำแหน่งลงบนแผนที่และ Minimap เพื่อบอกผู้เล่นว่าสถานที่สำคัญอยู่ตรงไหน เช่น โรงพยาบาล สถานีตำรวจ Garage ร้านค้า ธนาคาร จุดทำงาน หรือจุดหมายของ Mission

วิธีพื้นฐานที่สุดคือใช้

AddBlipForCoord(x, y, z)

ซึ่ง Cfx.re ระบุว่าใช้สร้าง Blip จาก Coordinates และคืน Blip Handle เพื่อนำไปตั้งค่าเพิ่มเติมด้วยตระกูล SET_BLIP_*.

Flow พื้นฐานคือ

Coordinates
↓
AddBlipForCoord
↓
SetBlipSprite
↓
SetBlipColour
↓
SetBlipScale
↓
SetBlipAsShortRange
↓
ตั้งชื่อ Blip
↓
พร้อมใช้งาน

บทความนี้จาก comsiam จะทำตั้งแต่ Blip ตัวแรก ไปจนถึง Config หลายตำแหน่ง, Entity Blip, Radius Blip, GPS Route และการ Cleanup ไม่ให้ Blip ซ้ำ

① สร้าง Blip ตัวแรกใน FiveM

ตัวอย่างง่ายที่สุด

CreateThread(function()
local blip = AddBlipForCoord(
307.17,
-595.31,
43.28
)
end)

ADD_BLIP_FOR_COORD ใช้สร้าง Blip ณพิกัดที่ระบุ และ Handle ที่คืนมาสามารถนำไปปรับ Sprite, สี, Scale และ Properties อื่นต่อได้.

② X Y Z คืออะไร

ค่าพิกัด

X
Y
Z

คือ Coordinates ของตำแหน่งในโลก GTA V

ตัวอย่าง

vector3(
307.17,
-595.31,
43.28
)

ถ้าต้องการ Blip โรงพยาบาล ต้องใส่ Coordinates ของโรงพยาบาลที่ Server ใช้งานจริง

③ Blip Handle คืออะไร

เมื่อเขียน

local blip = AddBlipForCoord(...)

ตัวแปร

blip

จะเก็บ Handle ของ Blip ที่สร้างขึ้น

จากนั้นจึงใช้ Handle เดิมกับ

SetBlipSprite
SetBlipColour
SetBlipScale
SetBlipDisplay
SetBlipRoute
RemoveBlip

Cfx.re ระบุว่า Blip ที่สร้างผ่าน ADD_BLIP_FOR_COORD สามารถถูกแก้ด้วย Natives กลุ่ม SET_BLIP_*.

④ วิธีเปลี่ยน Icon ของ Blip

ใช้

SetBlipSprite(blip, spriteId)

SET_BLIP_SPRITE ใช้เปลี่ยน Sprite หรือ Icon ที่ Blip แสดง.

ตัวอย่าง

SetBlipSprite(blip, 61)

แต่ควรเลือก Sprite ID จากรายการที่ FiveM รองรับจริง

⑤ หา Blip Sprite ID จากไหน

Cfx.re มีหน้า Reference สำหรับ Blip Sprites และ Blip Colors โดยรายการปัจจุบันในเอกสารอ้างอิง Game Build 3258.

ดังนั้นหากต้องการ Icon เช่น

Hospital
Police
Garage
Shop
Airport

ควรเลือกจาก Reference ปัจจุบันแทนการ Copy หมายเลขจาก Tutorial เก่าที่ไม่ทราบ Build

⑥ วิธีเปลี่ยนสี Blip

ใช้

SetBlipColour(blip, colourId)

SET_BLIP_COLOUR รับ Blip Handle และค่าของสีสำหรับ Blip นั้น.

ตัวอย่าง

SetBlipColour(blip, 2)

⑦ สีของ Blip มีอะไรบ้าง

Cfx.re มีรายการ Blip Colors อยู่ใน Reference เดียวกับ Blip Sprites เช่น White, Red, Green, Blue, Yellow และสีอื่น ๆ ตาม ID ที่ GTA รองรับ.

ควรใช้สีอย่างมีระบบ เช่น

Hospital → สีหนึ่ง
Police → สีหนึ่ง
Jobs → สีหนึ่ง
Garages → สีหนึ่ง

เพื่อให้ Map อ่านง่าย

⑧ วิธีปรับขนาด Blip

ใช้

SetBlipScale(blip, 0.8)

FiveM มี SET_BLIP_SCALE สำหรับกำหนด Scale ของ Blip ด้วยค่า Float.

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

SetBlipScale(blip, 0.7)

หรือ

SetBlipScale(blip, 1.0)

แล้วทดสอบขนาดจริงในเกม

⑨ Blip ใหญ่เกินไปแก้อย่างไร

ลด

scale

เช่นจาก

1.0

เป็น

0.7

ไม่จำเป็นต้องเปลี่ยน Sprite หากปัญหามีเพียงขนาด เพราะ FiveM แยก Sprite และ Scale เป็นคนละ Property.

⑩ วิธีตั้งให้ Blip แสดงเฉพาะระยะใกล้

ใช้

SetBlipAsShortRange(
blip,
true
)

Cfx.re ระบุว่า SET_BLIP_AS_SHORT_RANGE ใช้กำหนดว่า Blip ควรแสดงเมื่ออยู่ใกล้หรือบน Minimap ตาม Short-range Behavior.

เหมาะกับ Blips จำนวนมากที่ไม่จำเป็นต้องรกแผนที่ตลอดเวลา

⑪ Blip ไหนเหมาะกับ Short Range

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

ATM
ร้านเล็ก
จุดเปลี่ยนเสื้อผ้า
จุดเก็บของ
จุด Interaction ย่อย

สามารถใช้

SetBlipAsShortRange(blip, true)

ส่วนสถานที่สำคัญ เช่นโรงพยาบาลหรือสนามบิน อาจตั้งเป็น false ตาม UX ที่ต้องการ.

⑫ Blip หายเมื่ออยู่ไกลเกิดจากอะไร

ให้ตรวจ

SetBlipAsShortRange(blip, true)

ก่อน

เพราะ Native นี้ถูกออกแบบมาเพื่อจำกัดการแสดง Blip ตามระยะ/Minimap Behavior.

⑬ วิธีควบคุมว่า Blip แสดงบน Map หรือ Minimap

ใช้

SetBlipDisplay(
blip,
displayId
)

FiveM มี SET_BLIP_DISPLAY สำหรับกำหนดบริบทที่ Blip แสดง เช่น Main Map, Minimap หรือทั้งสอง โดยเอกสารมีตาราง Behavior ของแต่ละ Display ID.

⑭ Blip เห็นบน Map แต่ไม่เห็น Minimap

ตรวจ

SetBlipDisplay

ก่อน

เพราะบาง Display Modes แสดงบน Main Map เท่านั้น ขณะที่บางค่ารองรับทั้ง Main Map และ Minimap.

⑮ วิธีตั้งชื่อ Blip

FiveM มี Text Command สำหรับตั้งชื่อ Blip โดย Flow คือ

BEGIN_TEXT_COMMAND_SET_BLIP_NAME
↓
เพิ่มข้อความ
↓
END_TEXT_COMMAND_SET_BLIP_NAME

BEGIN_TEXT_COMMAND_SET_BLIP_NAME เริ่มคำสั่งเปลี่ยนชื่อ Blip และ END_TEXT_COMMAND_SET_BLIP_NAME ใช้ Finalize ชื่อนั้นให้ Blip ที่ระบุ.

ตัวอย่างรูปแบบที่ใช้กันทั่วไป

BeginTextCommandSetBlipName('STRING')
AddTextComponentString('Hospital')
EndTextCommandSetBlipName(blip)

⑯ ตัวอย่าง Blip โรงพยาบาลแบบครบ

CreateThread(function()

local blip = AddBlipForCoord(
307.17,
-595.31,
43.28
)

SetBlipSprite(
blip,
61
)

SetBlipColour(
blip,
2
)

SetBlipScale(
blip,
0.8
)

SetBlipAsShortRange(
blip,
true
)

BeginTextCommandSetBlipName(
'STRING'
)

AddTextComponentString(
'Hospital'
)

EndTextCommandSetBlipName(
blip
)

end)

ตัวอย่างนี้รวม Creation, Sprite, Colour, Scale, Short Range และ Name โดยใช้ Blip APIs ที่ Cfx.re มีให้.

⑰ ต้องใส่ Blip ใน while true ไหม

ไม่ควร สำหรับ Blip แบบ Static

ไม่ควรทำ

while true do
Wait(0)

AddBlipForCoord(
x,
y,
z
)
end

เพราะ ADD_BLIP_FOR_COORD เป็นการสร้าง Blip ใหม่เมื่อถูกเรียก ไม่ใช่คำสั่ง Update Blip ตัวเดิม.

⑱ Static Blip ควรสร้างกี่ครั้ง

ปกติสร้างครั้งเดียวตาม Resource Lifecycle เช่น

CreateThread(function()
-- create blips
end)

หรือ Initialization Function

จากนั้นเก็บ Handle ไว้ถ้าต้อง Update/Remove ภายหลัง

⑲ วิธีเพิ่ม Blip หลายตำแหน่ง

อย่า Copy Code ชุดใหญ่หลายสิบครั้ง

ควรเก็บข้อมูลเป็น Table

ตัวอย่าง

local Locations = {

{
name = 'Hospital',
coords = vector3(
307.17,
-595.31,
43.28
),
sprite = 61,
colour = 2,
scale = 0.8
},

{
name = 'Garage',
coords = vector3(
215.80,
-810.10,
30.73
),
sprite = 357,
colour = 3,
scale = 0.8
}

}

แล้วใช้ Loop สร้างครั้งเดียว

⑳ ตัวอย่างสร้างหลาย Blips จาก Config

CreateThread(function()

for _, data in ipairs(Locations) do

local blip = AddBlipForCoord(
data.coords.x,
data.coords.y,
data.coords.z
)

SetBlipSprite(
blip,
data.sprite
)

SetBlipColour(
blip,
data.colour
)

SetBlipScale(
blip,
data.scale
)

SetBlipAsShortRange(
blip,
true
)

BeginTextCommandSetBlipName(
'STRING'
)

AddTextComponentString(
data.name
)

EndTextCommandSetBlipName(
blip
)

end

end)

Blip แต่ละตัวมี Handle แยกกัน และ Properties สามารถกำหนดจาก Config ตาม Native APIs ของ FiveM.

㉑ ทำไม Config ดีกว่า Hard-code

เมื่อมี Blips 50 จุด

Config ทำให้แก้

ชื่อ
ตำแหน่ง
Sprite
สี
ขนาด
Short Range

ได้จากข้อมูลกลาง

และลดโอกาส Copy Code ผิด

㉒ วิธีเพิ่ม GPS Route ให้ Blip

ใช้

SetBlipRoute(
blip,
true
)

Cfx.re ระบุว่า SET_BLIP_ROUTE ใช้เปิดหรือปิดการแสดง Route สำหรับ Blip Object.

㉓ ตัวอย่าง Blip จุดส่งของพร้อม GPS

local blip = AddBlipForCoord(
1200.0,
-1300.0,
35.0
)

SetBlipRoute(
blip,
true
)

จุดหมายจึงมี Blip และ Route ตามระบบ Navigation ของเกม.

㉔ ปิด GPS Route อย่างไร

ใช้

SetBlipRoute(
blip,
false
)

เมื่อ

ผู้เล่นถึงจุดหมาย
ยกเลิก Mission
เปลี่ยนจุดหมาย

ควรปิด Route ตาม Gameplay Lifecycle.

㉕ ล้าง Blip Routes ทั้งหมดได้ไหม

FiveM มี

CLEAR_ALL_BLIP_ROUTES

ซึ่ง Cfx.re ระบุว่าใช้ Clear Routes ที่ Active จาก SET_BLIP_ROUTE.

เหมาะกับระบบ Reset Mission Navigation

㉖ วิธีลบ Blip

ใช้

RemoveBlip(blip)

Cfx.re ระบุว่า REMOVE_BLIP ใช้ลบ Blip ออกจาก Map และโดยปกติ Blip จะถูกลบโดย Script/Resource ที่สร้างมัน.

㉗ Temporary Blip ควร Remove เสมอไหม

ถ้า Blip ถูกสร้างเฉพาะสำหรับ

Mission
Delivery
Search
Temporary Vehicle
Temporary NPC

เมื่อจบงานควร Cleanup

ตัวอย่าง

if blip then
RemoveBlip(blip)
blip = nil
end

เพื่อลดปัญหา Blip เก่าค้างบน Map.

㉘ Resource อื่นลบ Blip ของเราได้ไหม

โดยปกติ REMOVE_BLIP มีข้อจำกัดให้ Resource/Script ที่สร้าง Blip เป็นผู้ลบ แต่ Cfx.re มี Native สำหรับ Override ข้อจำกัดนี้กรณีที่ตั้งใจจริง.

โดยทั่วไปไม่ควรให้ Resource หนึ่งไล่ลบ Blips ของอีก Resource แบบสุ่ม

㉙ Entity Blip คืออะไร

ถ้าต้องการ Blip ติดตาม Entity ที่เคลื่อนที่ เช่น

Ped
Vehicle
Object

ใช้

AddBlipForEntity(entity)

Cfx.re ระบุว่า ADD_BLIP_FOR_ENTITY รองรับ Objects, Vehicles และ Peds.

㉚ ตัวอย่าง Blip ติดรถ

local vehicle = GetVehiclePedIsIn(
PlayerPedId(),
false
)

local blip = AddBlipForEntity(
vehicle
)

จากนั้นสามารถกำหนด Sprite/Colour/Scale ให้ Blip Handle นี้ต่อได้.

㉛ รถเคลื่อนที่ควรใช้ Entity Blip หรือ Coordinate Blip

ถ้า Blip ต้องตาม Vehicle/Ped/Object โดยตรง

ADD_BLIP_FOR_ENTITY

เหมาะกว่าในเชิงโครงสร้าง เพราะ Blip ผูกกับ Entity นั้นโดยตรง.

ไม่ควรสร้าง Coordinate Blip ใหม่ทุก Frame

㉜ ถ้าจำเป็นต้องย้าย Coordinate Blip ทำอย่างไร

FiveM มี

SET_BLIP_COORDS

สำหรับเปลี่ยน Coordinates ของ Blip Handle เดิม.

ดังนั้น

Create Blip หนึ่งครั้ง
↓
SetBlipCoords
↓
ย้ายจุดเดิม

ดีกว่าสร้างใหม่ทุกครั้ง

㉝ ตัวอย่าง Update พิกัด Blip

SetBlipCoords(
blip,
newX,
newY,
newZ
)

ใช้เมื่อ Architecture ต้องการ Coordinate-based Blip ที่ตำแหน่งเปลี่ยน.

㉞ Radius Blip คืออะไร

ใช้

AddBlipForRadius(
x,
y,
z,
radius
)

Cfx.re ระบุว่า ADD_BLIP_FOR_RADIUS สร้าง Blip แบบ Radius รอบพิกัด แต่ไม่ได้สร้าง Sprite Icon มาให้เอง.

เหมาะกับ

Search Zone
Danger Zone
Mission Area
Gang Area

㉟ ทำไม Radius Blip ไม่มี Icon ตรงกลาง

เป็น Behavior ที่เอกสาร Cfx.re ระบุไว้โดยตรงว่า Radius Blip ไม่สร้าง Blip Sprite ให้เอง.

ถ้าต้องการทั้ง

พื้นที่วงกลม
+
Icon กลาง

ต้องสร้างสอง Blips

㊱ ตัวอย่าง Radius + Icon

local radiusBlip = AddBlipForRadius(
x,
y,
z,
150.0
)

local iconBlip = AddBlipForCoord(
x,
y,
z
)

ตัวหนึ่งแสดงพื้นที่ ส่วนอีกตัวเป็น Icon กลาง.

㊲ Area Blip คืออะไร

FiveM มี

ADD_BLIP_FOR_AREA

สำหรับสร้าง Blip รูปพื้นที่สี่เหลี่ยม โดยรับ Coordinates พร้อม Width และ Height.

เหมาะกับ

Restricted Zone
Event Zone
Large Work Area
Custom District

㊳ Radius กับ Area ต่างกันอย่างไร

จำแบบนี้

Radius Blip
= วงกลม

Area Blip
= สี่เหลี่ยม

FiveM แยก Native สำหรับทั้งสองรูปแบบ.

㊴ Area Blip หมุนได้ไหม

Cfx.re แนะนำให้ใช้ SET_BLIP_ROTATION ร่วมกับ Area Blip สำหรับจัด Orientation ตามที่ต้องการ.

จึงเหมาะกับพื้นที่ที่ไม่ได้วางตรงแกน Map

㊵ Blip Rotation ใช้กับอะไร

ใช้

SetBlipRotation(
blip,
heading
)

เพื่อกำหนด Rotation ของ Blip.

เหมาะกับ Icons หรือ Area Blips ที่ต้องบอกทิศทาง

㊶ Blip Category คืออะไร

FiveM มี

SET_BLIP_CATEGORY

สำหรับกำหนด Category Index ของ Blip.

Server ที่มี Blip จำนวนมากสามารถใช้ Categories ช่วยจัดระบบ Map ได้ตาม Behavior ที่เกมรองรับ

㊷ Blip Priority คืออะไร

FiveM ยังมี

SET_BLIP_PRIORITY

เป็น Property สำหรับ Blip.

เหมาะกับระบบ Map ซับซ้อนที่ต้องควบคุมลำดับความสำคัญของ Elements

㊸ Blip กระพริบได้ไหม

FiveM มี Blip Flash APIs เช่น SET_BLIP_FLASH_TIMER ซึ่งรับระยะเวลาเป็น Milliseconds เพื่อให้ Blip Flash ชั่วคราว.

เหมาะกับ

Emergency
Mission Alert
Target ใหม่

แต่ไม่ควรทำทุก Blip Flash พร้อมกัน เพราะ Map จะอ่านยาก

㊹ ทำ Blip สำหรับผู้เล่นหรือรถตำรวจอย่างไร

ถ้าต้องการ Marker ตาม Entity

ใช้

ADD_BLIP_FOR_ENTITY

แทนการสร้างจุดใหม่จาก Coordinates ต่อเนื่อง เพราะ Native นี้ผูก Blip กับ Ped/Vehicle/Object.

㊺ Heading Indicator ทำได้ไหม

FiveM มี Native สำหรับเพิ่ม GTA Online-style Player Heading Indicator บน Blip.

เหมาะกับ Player/Entity Blip ที่ต้องการให้ผู้เล่นเห็นทิศที่ Entity หันอยู่

㊻ Blip สำหรับร้านค้าควรทำแบบไหน

ร้านค้าคงที่เหมาะกับ

ADD_BLIP_FOR_COORD

แล้วตั้ง

Sprite
Colour
Scale
Short Range
Name

เพราะตำแหน่งไม่ได้เคลื่อนที่.

㊼ Blip โรงพยาบาลควร Short Range ไหม

ขึ้นกับ UX

หากต้องการให้ผู้เล่นเปิด Main Map แล้วหาโรงพยาบาลจากที่ไหนก็ได้ ควรหลีกเลี่ยงการซ่อนมากเกินไป

ถ้าต้องการลด Icon บน Minimap สามารถปรับ Display/Short Range ตาม Design โดย Natives สองส่วนนี้แยกควบคุมได้.

㊽ Job Blip ควรแสดงให้ทุกคนไหม

ไม่จำเป็น

ตัวอย่าง

Police Job
→ Police Blips

Mechanic
→ Mechanic Blips

Framework/Gameplay Layer ควรตัดสิน Permission แล้วจึง Create หรือ Remove Blips ให้ผู้เล่นที่เกี่ยวข้อง

ตัว Blip เองสร้างผ่าน FiveM Natives ไม่ได้บังคับว่าต้องใช้ ESX หรือ QBCore.

㊾ Blip ต้องใช้ ESX ไหม

ไม่

ADD_BLIP_FOR_COORD, SET_BLIP_SPRITE, SET_BLIP_COLOUR และ APIs อื่นเป็น Native ของ FiveM/GTA โดยตรง.

ESX จะเข้ามาเกี่ยวเมื่อคุณต้องการ Logic ตาม Job/Player Data

㊿ Blip ต้องใช้ QBCore ไหม

ไม่จำเป็นเช่นกัน

Standalone Resource สามารถสร้าง Blips จาก FiveM APIs ได้โดยตรง.

QBCore จะมีบทบาทเมื่อ Visibility หรือ Location ถูกกำหนดตาม Framework State

51. เพิ่ม Blip ฝั่ง Server ได้ไหม

Cfx.re มี Server-side RPC equivalent ของ ADD_BLIP_FOR_COORD เช่นกัน.

อย่างไรก็ตามควรเลือก Client หรือ Server Architecture ตามว่า Blip เป็น

Global
Per-player
Per-job
Mission-specific

และใครควรเป็นผู้ควบคุม State

52. Static Blips ทั่วไปควรทำซับซ้อนไหม

ไม่จำเป็น

ถ้าต้องการแค่

Hospital
Garage
Bank

Client Config + Create ครั้งเดียวอาจเพียงพอ

ไม่จำเป็นต้องสร้าง Network Logic หากทุกคนใช้ข้อมูลเดียวและ Resource Architecture ไม่ต้องการ State ซับซ้อน

53. วิธีป้องกัน Blip ซ้ำ

เก็บ Handle

ตัวอย่าง

local hospitalBlip = nil

ก่อนสร้าง

if not hospitalBlip then

hospitalBlip = AddBlipForCoord(
x,
y,
z
)

end

จากนั้น Remove และ Reset Handle เมื่อไม่ใช้

RemoveBlip(hospitalBlip)
hospitalBlip = nil

REMOVE_BLIP ใช้ลบ Blip จาก Map.

54. Character Load Event ทำให้ Blip ซ้ำได้ไหม

ได้ ถ้า Resource มีทั้ง

Resource Start
→ Create Blips

Player Loaded
→ Create Blips อีก

โดยไม่มี Guard

Static Blip หนึ่งจุดจึงอาจถูกสร้างสองครั้ง

ต้องกำหนด Lifecycle ให้ชัด

55. Restart Resource แล้ว Blip หายเป็นเรื่องปกติไหม

หาก Blips ถูก Resource สร้างระหว่าง Runtime Resource ต้องมี Initialization สำหรับสร้าง Blips ที่จำเป็นใหม่หลัง Start/Restart

ดังนั้น Config-based Creation ช่วยให้ Restore Blips ได้ง่าย

56. Blip หายให้ตรวจอะไรบ้าง

ตรวจตามลำดับ

Blip ถูก Create หรือยัง
↓
Coordinates ถูกไหม
↓
Sprite ถูกไหม
↓
Scale ถูกไหม
↓
Alpha ถูกไหม
↓
Display ถูกไหม
↓
Short Range ถูกไหม
↓
Resource ยังทำงานไหม

FiveM มี Properties เหล่านี้แยกกัน จึงไม่ควรสร้าง Blip ใหม่ทันทีเพียงเพราะมองไม่เห็น.

57. Blip มีแต่จางมาก

FiveM มี SET_BLIP_ALPHA สำหรับกำหนด Alpha ของ Blip.

ดังนั้นถ้า Icon มีแต่แทบมองไม่เห็น ให้ตรวจ Alpha ก่อนเปลี่ยน Sprite

58. Blip เห็นผิด Icon

ตรวจ

Sprite ID

และใช้รายการ Blip Reference ของ Cfx.re เพื่อตรวจ Sprite ปัจจุบัน.

59. Blip อยู่ผิดตำแหน่ง

ตรวจ

X
Y
Z

ถ้า Blip ถูกสร้างแล้ว แต่ต้องย้ายโดยไม่สร้างใหม่ ใช้ SET_BLIP_COORDS.

60. วิธีทำ Function เพิ่ม Blip ที่ใช้ซ้ำได้

local function createBlip(data)

local blip = AddBlipForCoord(
data.coords.x,
data.coords.y,
data.coords.z
)

SetBlipSprite(
blip,
data.sprite
)

SetBlipColour(
blip,
data.colour
)

SetBlipScale(
blip,
data.scale
)

SetBlipAsShortRange(
blip,
data.shortRange
)

BeginTextCommandSetBlipName(
'STRING'
)

AddTextComponentString(
data.name
)

EndTextCommandSetBlipName(
blip
)

return blip

end

Function นี้ใช้ Flow ที่สอดคล้องกับ Blip Creation/Property APIs ของ FiveM และคืน Handle ไว้สำหรับ Update หรือ Remove ภายหลัง.

61. ตัวอย่าง Config หลายจุดแบบพร้อมใช้

local BlipConfig = {

{
name = 'Hospital',

coords = vector3(
307.17,
-595.31,
43.28
),

sprite = 61,
colour = 2,
scale = 0.8,
shortRange = false
},

{
name = 'Garage',

coords = vector3(
215.80,
-810.10,
30.73
),

sprite = 357,
colour = 3,
scale = 0.8,
shortRange = true
}

}

จากนั้น

CreateThread(function()

for _, data in ipairs(BlipConfig) do
createBlip(data)
end

end)

ช่วยให้ Server เพิ่มตำแหน่งใหม่ได้จาก Config โดยไม่ต้องเขียน Creation Logic ซ้ำ

62. ตารางสรุป Native สำหรับเพิ่ม Blip

ต้องการทำอะไรNative
เพิ่ม Blip จากพิกัดADD_BLIP_FOR_COORD
เพิ่ม Blip ติด EntityADD_BLIP_FOR_ENTITY
เพิ่มวง RadiusADD_BLIP_FOR_RADIUS
เพิ่มพื้นที่สี่เหลี่ยมADD_BLIP_FOR_AREA
เปลี่ยน IconSET_BLIP_SPRITE
เปลี่ยนสีSET_BLIP_COLOUR
เปลี่ยนขนาดSET_BLIP_SCALE
จำกัดระยะSET_BLIP_AS_SHORT_RANGE
กำหนด Map/MinimapSET_BLIP_DISPLAY
เปลี่ยนพิกัดSET_BLIP_COORDS
เปิด GPS RouteSET_BLIP_ROUTE
ลบ BlipREMOVE_BLIP

Natives เหล่านี้เป็นส่วนหนึ่งของ Blip/HUD APIs ใน Cfx.re Documentation.

63. Checklist ก่อนเปิดใช้งาน Blips

☐ Coordinates ถูก
☐ Sprite ถูก
☐ Colour ถูก
☐ Scale ถูก
☐ Short Range ถูก
☐ Display ถูก
☐ Name ถูก
☐ Route ถูก
☐ ไม่มี Duplicate Creation
☐ Temporary Blips Remove ได้
☐ Entity Blip ผูก Entity ถูก
☐ Resource Restart แล้วสร้างใหม่ถูก

64. สิ่งที่ไม่ควรทำ

หลีกเลี่ยง

AddBlipForCoord ทุก Frame
สร้าง Blip ตัวเดิมซ้ำทุก Player Loaded
สร้าง Vehicle Blip ใหม่ทุก Tick
ไม่เก็บ Handle
ไม่ Remove Temporary Blip
เปิด Route แล้วไม่ปิด
ใช้ Radius Blipแล้วคาดว่าจะมี Icon กลาง
ใช้ Sprite ID แบบสุ่ม

โดยเฉพาะ ADD_BLIP_FOR_COORD เป็นการสร้าง Blip ใหม่ และ ADD_BLIP_FOR_RADIUS ไม่สร้าง Sprite Icon ให้อัตโนมัติ.

65. สูตรจำง่ายสำหรับเพิ่ม Blip

CREATE
↓
SPRITE
↓
COLOUR
↓
SCALE
↓
RANGE
↓
NAME
↓
ROUTE
↓
CLEANUP

สรุป วิธีเพิ่ม Blip ใน FiveM

วิธีเพิ่ม Blip แบบพื้นฐานคือ

local blip = AddBlipForCoord(
x,
y,
z
)

จากนั้นปรับแต่งด้วย

SetBlipSprite(blip, sprite)
SetBlipColour(blip, colour)
SetBlipScale(blip, scale)
SetBlipAsShortRange(blip, true)

ADD_BLIP_FOR_COORD ใช้สร้าง Blip จาก Coordinates ส่วน Sprite, Scale และ Short Range ถูกควบคุมด้วย Natives แยกของ FiveM.

ถ้าต้องการตั้งชื่อ ให้ใช้ Flow

BEGIN_TEXT_COMMAND_SET_BLIP_NAME
↓
เพิ่มข้อความ
↓
END_TEXT_COMMAND_SET_BLIP_NAME

ซึ่ง Cfx.re มี Native รองรับโดยตรง.

ถ้าต้องการให้ Blip เป็นจุดหมาย GPS ใช้

SetBlipRoute(
blip,
true
)

และปิดด้วย false เมื่อจบงาน.

ถ้าต้องการ Blip ติดรถ, Ped หรือ Object ควรใช้

ADD_BLIP_FOR_ENTITY

แทนการสร้าง Coordinate Blip ใหม่ทุก Frame เพราะ Native นี้รองรับ Entities ประเภทดังกล่าวโดยตรง.

ถ้าต้องการพื้นที่วงกลมใช้

ADD_BLIP_FOR_RADIUS

แต่ Radius Blip ไม่มี Sprite Icon ตรงกลางมาให้เอง หากต้องการ Icon ต้องเพิ่ม Coordinate Blip อีกตัว.

ถ้าต้องการพื้นที่สี่เหลี่ยมใช้

ADD_BLIP_FOR_AREA

ซึ่ง FiveM รองรับ Width และ Height ของพื้นที่.

และเมื่อ Blip ชั่วคราวไม่ต้องใช้งานแล้ว ใช้

RemoveBlip(blip)

เพื่อลบ Blip ออกจาก Map.

สำหรับ Server ที่มี Blips หลายสิบหรือหลายร้อยจุด แนวทางของ comsiam คือเก็บข้อมูลทั้งหมดไว้ใน Config แล้วใช้ Function กลางสร้าง Blip เพียงครั้งเดียวต่อจุด วิธีนี้แก้ง่ายกว่า ลด Code ซ้ำ และช่วยป้องกันปัญหา Blip ซ้อนเต็มแผนที่จากการสร้างซ้ำใน Loop หรือ Events หลายตัว

Comments

Popular posts from this blog

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

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

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