{"hash":"0xA6EF0C54A3443E70","ns":"MAP","name":"_BLIP_ADD_FOR_VOLUME","slug":"_BLIP_ADD_FOR_VOLUME","official":false,"named":true,"luaName":"BlipAddForVolume","game":"rdr3","apiset":"client","returnType":"Blip","params":[{"name":"blipHash","type":"Hash","description":"Blip style hash. Use BLIP_STYLE_AREA_NO_DIM (620596860) for zones."},{"name":"volume","type":"Volume","description":"Volume or volume aggregate handle (CREATE_VOLUME_AGGREGATE)."}],"summary":"Draws a blip shaped like a volume on the pause map — with a volume aggregate of boxes it draws arbitrary polygons.","descriptions":[],"examples":[],"aliases":[],"enums":[],"related":["0x662D364ABF16DE2F","0x45F13B7E0A15C880","0x39816F6F94F385AD","0x59F6F5C1D129F106"],"build":"1207","sources":["alloc8or","overlay"],"doc":3,"overlayFile":"overlay/natives/0xA6EF0C54A3443E70.md","noteMeta":{"contributors":["borderline-rp"],"tags":["map","blip","volume"]},"notes":"### Polygons on the pause map\n\nFill a volume aggregate with boxes (scanline strips of the polygon) and add **one** blip for the whole aggregate. Position and size come out exact.\n\nFor clean edges:\n\n| Setting | Value | Why |\n| --- | --- | --- |\n| Style | `BLIP_STYLE_AREA_NO_DIM` (620596860) | `BLIP_STYLE_AREA` darkens while you stand inside it |\n| Modifier | `BLIP_MODIFIER_AREA_ACCURATE` (453264060) | without it every box is feathered: seams between strips, thin tips vanish |\n| Strips | overlap them by ×1.3–1.6 | removes the remaining seams; the step size (~10 m) sets the staircase on slanted edges |\n\n**An aggregate holds at most 32 boxes.** Extra boxes are dropped silently, which looks like clipped corners. Use one aggregate (and one blip) per 32 boxes.\n\n`SET_BLIP_NAME` on an area blip shows no hover label. Put a point blip with `BLIP_STYLE_SHOP` (168093330, visible at every zoom) at the centre for the name. An `MP_COLOR_*` modifier added after the accurate modifier still works.\n\n```lua\nlocal agg = Citizen.InvokeNative(0x59F6F5C1D129F106, Citizen.ResultAsInteger()) -- CREATE_VOLUME_AGGREGATE\nfor _, b in ipairs(strips) do -- at most 32\n    Citizen.InvokeNative(0x39816F6F94F385AD, agg, b.x + 0.0, b.y + 0.0, z + 0.0, 0.0, 0.0, b.heading + 0.0, b.w + 0.0, b.h + 0.0, 50.0)\nend\nlocal blip = Citizen.InvokeNative(0xA6EF0C54A3443E70, joaat('BLIP_STYLE_AREA_NO_DIM'), agg, Citizen.ResultAsInteger())\nCitizen.InvokeNative(0x662D364ABF16DE2F, blip, joaat('BLIP_MODIFIER_AREA_ACCURATE')) -- BLIP_ADD_MODIFIER\n```\n\nVerified in game on the Borderline RP server, September 2026.","url":"https://natives.borderlinerp.com/natives/MAP/_BLIP_ADD_FOR_VOLUME","markdownUrl":"https://natives.borderlinerp.com/natives/MAP/_BLIP_ADD_FOR_VOLUME.md","snippets":{"lua":"local retval = BlipAddForVolume(blipHash, volume)","luaInvoke":"local retval = Citizen.InvokeNative(0xA6EF0C54A3443E70, blipHash, volume, Citizen.ResultAsInteger())","js":"const retval = BlipAddForVolume(blipHash, volume);","jsInvoke":"const retval = Citizen.invokeNative('0xA6EF0C54A3443E70', blipHash, volume, Citizen.returnResultAnyway(), Citizen.resultAsInteger());","csharp":"int retval = Function.Call<int>((Hash)0xA6EF0C54A3443E70, blipHash, volume);","notes":["Hash parameters: the named function also accepts a string and hashes it for you; `Citizen.InvokeNative` needs the number — pass `joaat(\"name\")` or a backtick literal like `` `name` ``.","The name is a community guess and may change. If the named call is missing in your client build, use `InvokeNative` with the hash — it always works."]}}