วิธีเพิ่ม 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 คืออะไร
ค่าพิกัด
XYZ
คือ Coordinates ของตำแหน่งในโลก GTA V
ตัวอย่าง
vector3(307.17,-595.31,43.28)
ถ้าต้องการ Blip โรงพยาบาล ต้องใส่ Coordinates ของโรงพยาบาลที่ Server ใช้งานจริง
③ Blip Handle คืออะไร
เมื่อเขียน
local blip = AddBlipForCoord(...)
ตัวแปร
blip
จะเก็บ Handle ของ Blip ที่สร้างขึ้น
จากนั้นจึงใช้ Handle เดิมกับ
SetBlipSpriteSetBlipColourSetBlipScaleSetBlipDisplaySetBlipRouteRemoveBlip
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 เช่น
HospitalPoliceGarageShopAirport
ควรเลือกจาก 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 doWait(0)AddBlipForCoord(x,y,z)end
เพราะ ADD_BLIP_FOR_COORD เป็นการสร้าง Blip ใหม่เมื่อถูกเรียก ไม่ใช่คำสั่ง Update Blip ตัวเดิม.
⑱ Static Blip ควรสร้างกี่ครั้ง
ปกติสร้างครั้งเดียวตาม Resource Lifecycle เช่น
CreateThread(function()-- create blipsend)
หรือ 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) dolocal 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)endend)
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 ถูกสร้างเฉพาะสำหรับ
MissionDeliverySearchTemporary VehicleTemporary NPC
เมื่อจบงานควร Cleanup
ตัวอย่าง
if blip thenRemoveBlip(blip)blip = nilend
เพื่อลดปัญหา Blip เก่าค้างบน Map.
㉘ Resource อื่นลบ Blip ของเราได้ไหม
โดยปกติ REMOVE_BLIP มีข้อจำกัดให้ Resource/Script ที่สร้าง Blip เป็นผู้ลบ แต่ Cfx.re มี Native สำหรับ Override ข้อจำกัดนี้กรณีที่ตั้งใจจริง.
โดยทั่วไปไม่ควรให้ Resource หนึ่งไล่ลบ Blips ของอีก Resource แบบสุ่ม
㉙ Entity Blip คืออะไร
ถ้าต้องการ Blip ติดตาม Entity ที่เคลื่อนที่ เช่น
PedVehicleObject
ใช้
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 ZoneDanger ZoneMission AreaGang 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 ZoneEvent ZoneLarge Work AreaCustom 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 ชั่วคราว.
เหมาะกับ
EmergencyMission AlertTarget ใหม่
แต่ไม่ควรทำทุก 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
แล้วตั้ง
SpriteColourScaleShort RangeName
เพราะตำแหน่งไม่ได้เคลื่อนที่.
㊼ Blip โรงพยาบาลควร Short Range ไหม
ขึ้นกับ UX
หากต้องการให้ผู้เล่นเปิด Main Map แล้วหาโรงพยาบาลจากที่ไหนก็ได้ ควรหลีกเลี่ยงการซ่อนมากเกินไป
ถ้าต้องการลด Icon บน Minimap สามารถปรับ Display/Short Range ตาม Design โดย Natives สองส่วนนี้แยกควบคุมได้.
㊽ Job Blip ควรแสดงให้ทุกคนไหม
ไม่จำเป็น
ตัวอย่าง
Police Job→ Police BlipsMechanic→ 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 เป็น
GlobalPer-playerPer-jobMission-specific
และใครควรเป็นผู้ควบคุม State
52. Static Blips ทั่วไปควรทำซับซ้อนไหม
ไม่จำเป็น
ถ้าต้องการแค่
HospitalGarageBank
Client Config + Create ครั้งเดียวอาจเพียงพอ
ไม่จำเป็นต้องสร้าง Network Logic หากทุกคนใช้ข้อมูลเดียวและ Resource Architecture ไม่ต้องการ State ซับซ้อน
53. วิธีป้องกัน Blip ซ้ำ
เก็บ Handle
ตัวอย่าง
local hospitalBlip = nil
ก่อนสร้าง
if not hospitalBlip thenhospitalBlip = 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 BlipsPlayer 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 อยู่ผิดตำแหน่ง
ตรวจ
XYZ
ถ้า 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 blipend
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) docreateBlip(data)endend)
ช่วยให้ Server เพิ่มตำแหน่งใหม่ได้จาก Config โดยไม่ต้องเขียน Creation Logic ซ้ำ
62. ตารางสรุป Native สำหรับเพิ่ม Blip
| ต้องการทำอะไร | Native |
|---|---|
| เพิ่ม Blip จากพิกัด | ADD_BLIP_FOR_COORD |
| เพิ่ม Blip ติด Entity | ADD_BLIP_FOR_ENTITY |
| เพิ่มวง Radius | ADD_BLIP_FOR_RADIUS |
| เพิ่มพื้นที่สี่เหลี่ยม | ADD_BLIP_FOR_AREA |
| เปลี่ยน Icon | SET_BLIP_SPRITE |
| เปลี่ยนสี | SET_BLIP_COLOUR |
| เปลี่ยนขนาด | SET_BLIP_SCALE |
| จำกัดระยะ | SET_BLIP_AS_SHORT_RANGE |
| กำหนด Map/Minimap | SET_BLIP_DISPLAY |
| เปลี่ยนพิกัด | SET_BLIP_COORDS |
| เปิด GPS Route | SET_BLIP_ROUTE |
| ลบ Blip | REMOVE_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
Post a Comment