[{"data":1,"prerenderedAt":575},["ShallowReactive",2],{"/docs/scripts/sky-dj/features/boombox":3,"/docs/scripts/sky-dj/features/boombox-surround":563,"/docs/scripts/sky-dj/features/boombox-implemented-suggestions":574},{"id":4,"title":5,"body":6,"description":553,"extension":554,"head":555,"implementedSuggestions":555,"meta":556,"navigation":557,"path":558,"schemaOrg":555,"seo":559,"sitemap":560,"stem":561,"__hash__":562},"docs/1.docs/scripts/7.sky-dj/3.features/4.boombox.md","Boombox",{"type":7,"value":8,"toc":546},"minimark",[9,29,34,42,69,127,130,134,150,201,212,215,218,222,237,282,285,288,292,295,374,394,408,419,514,517,521,528,534,542],[10,11,12,13,17,18,17,21,24,25,28],"p",{},"Sky DJ includes four mobile boombox models: ",[14,15,16],"strong",{},"Classic",", ",[14,19,20],{},"Retro",[14,22,23],{},"Field"," and ",[14,26,27],{},"Ivory",". Each owner can have one deployed or stored device. Boomboxes use their own controls and online links; the club MP3 library remains separate.",[30,31,33],"h2",{"id":32},"place-first-then-open-the-controls","Place first, then open the controls",[10,35,36,37,41],{},"The default ",[38,39,40],"code",{},"/boombox"," command enters placement directly when you have no active device. Using the configured inventory item follows the same flow. The music panel opens only after placement succeeds.",[43,44,45,52,55,66],"ol",{},[46,47,48,49,51],"li",{},"Run ",[38,50,40],{},", or use the boombox item when item mode is enabled.",[46,53,54],{},"Choose a ground position with the actual 3D ghost. The placement HUD shows the controls below.",[46,56,57,58,61,62,65],{},"Press ",[14,59,60],{},"Enter"," at a valid position to place the device and open its panel. ",[14,63,64],{},"Backspace"," cancels without consuming an item.",[46,67,68],{},"Reopen a nearby device through its Sky interaction. The command also opens your existing active device when you are close enough; it does not create a second one.",[70,71,72,85],"table",{},[73,74,75],"thead",{},[76,77,78,82],"tr",{},[79,80,81],"th",{},"Placement control",[79,83,84],{},"Action",[86,87,88,97,105,113,120],"tbody",{},[76,89,90,94],{},[91,92,93],"td",{},"Page Up / Page Down",[91,95,96],{},"Cycle the four models when placing a new device",[76,98,99,102],{},[91,100,101],{},"Up / Down arrows",[91,103,104],{},"Adjust placement distance",[76,106,107,110],{},[91,108,109],{},"Left / Right arrows",[91,111,112],{},"Rotate",[76,114,115,117],{},[91,116,60],{},[91,118,119],{},"Confirm a valid ground position",[76,121,122,124],{},[91,123,64],{},[91,125,126],{},"Cancel",[10,128,129],{},"Moving an existing device keeps its model. Interaction uses the configured Sky target provider when enabled; otherwise it uses Sky's TextUI/help adapter and the interaction key.",[30,131,133],{"id":132},"shared-youtube-and-personal-spotify","Shared YouTube and personal Spotify",[10,135,136,137,17,140,17,143,24,146,149],{},"The drawer has separate ",[14,138,139],{},"YouTube",[14,141,142],{},"Spotify",[14,144,145],{},"Queue",[14,147,148],{},"Settings"," pages. The shared player bar contains the current track, play/pause, next and progress controls.",[70,151,152,165],{},[73,153,154],{},[76,155,156,159,162],{},[79,157,158],{},"Source",[79,160,161],{},"How to use it",[79,163,164],{},"Who hears it",[86,166,167,184],{},[76,168,169,171,181],{},[91,170,139],{},[91,172,173,174,177,178],{},"Paste a supported video link, then choose ",[14,175,176],{},"Play link"," or ",[14,179,180],{},"Add to queue",[91,182,183],{},"Nearby listeners in the same routing bucket, with distance attenuation and shared playback timing",[76,185,186,188,198],{},[91,187,142],{},[91,189,190,191,194,195],{},"Paste a supported ",[38,192,193],{},"https://open.spotify.com/"," link, then choose ",[14,196,197],{},"Open Spotify player",[91,199,200],{},"Only the user of that visible Spotify Embed",[10,202,203,204,207,208,211],{},"Spotify does ",[14,205,206],{},"not"," require a matching YouTube link. Its player is personal: it does not enter the shared queue, use the boombox's spatial range or synchronize nearby listeners. Spotify decides whether full playback or a preview is available. ",[14,209,210],{},"Stop player",", changing pages, closing or reopening the panel, entering placement and storing the device remove the Embed and stop its playback.",[10,213,214],{},"Existing saved tracks with Spotify metadata and an explicit YouTube mapping remain compatible; their shared sound still comes from YouTube. New Spotify selections do not create those mappings. No Spotify token or stream extraction is part of this player.",[10,216,217],{},"YouTube playback can continue while the panel is closed. Video availability, provider restrictions, autoplay and advertisements can affect playback. Test shared playback with two actual FiveM clients before relying on a particular video or provider setup.",[30,219,221],{"id":220},"volume-fixed-range-and-access","Volume, fixed range and access",[10,223,224,225,228,229,232,233,236],{},"Players can change volume and repeat. The audible radius is fixed by the server for every boombox: ",[14,226,227],{},"25 metres by default",". There is no per-device range slider. Administrators change the shared radius under ",[14,230,231],{},"Settings → Boombox","; ",[38,234,235],{},"BoomboxMaxRange"," is the equivalent Lua setting in file mode and accepts 3–50 metres.",[70,238,239,248],{},[73,240,241],{},[76,242,243,245],{},[79,244,84],{},[79,246,247],{},"Access",[86,249,250,258,266,274],{},[76,251,252,255],{},[91,253,254],{},"View a nearby active device",[91,256,257],{},"Nearby players",[76,259,260,263],{},[91,261,262],{},"Shared playback controls",[91,264,265],{},"Owner, an administrator, or nearby players when shared control is enabled",[76,267,268,271],{},[91,269,270],{},"Change shared control, move, carry or pack",[91,272,273],{},"Owner only; carrying must also be enabled globally",[76,275,276,279],{},[91,277,278],{},"Store another player's device",[91,280,281],{},"Administrator; the owner's claim is preserved",[10,283,284],{},"An administrator storing another player's device does not receive its item. Packing returns an item only if that device consumed one during placement, including its recorded metadata. A device placed in command-only mode cannot produce an item if the server later enables item mode.",[10,286,287],{},"New devices start with their world display off. The player panel does not expose the retired floating-display/DUI controls.",[30,289,291],{"id":290},"enable-inventory-placement","Enable inventory placement",[10,293,294],{},"Command-only placement is the default:",[296,297,303],"pre",{"className":298,"code":299,"filename":300,"language":301,"meta":302,"style":302},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","BoomboxEnabled = true,\nBoomboxRequireItem = false,\nBoomboxItem = 'sky_boombox',\nBoomboxCommand = 'boombox',\n","config/config.lua — file mode","lua","",[38,304,305,324,337,357],{"__ignoreMap":302},[306,307,310,314,318,321],"span",{"class":308,"line":309},"line",1,[306,311,313],{"class":312},"sTEyZ","BoomboxEnabled ",[306,315,317],{"class":316},"sMK4o","=",[306,319,320],{"class":316}," true",[306,322,323],{"class":312},",\n",[306,325,327,330,332,335],{"class":308,"line":326},2,[306,328,329],{"class":312},"BoomboxRequireItem ",[306,331,317],{"class":316},[306,333,334],{"class":316}," false",[306,336,323],{"class":312},[306,338,340,343,345,348,352,355],{"class":308,"line":339},3,[306,341,342],{"class":312},"BoomboxItem ",[306,344,317],{"class":316},[306,346,347],{"class":316}," '",[306,349,351],{"class":350},"sfazB","sky_boombox",[306,353,354],{"class":316},"'",[306,356,323],{"class":312},[306,358,360,363,365,367,370,372],{"class":308,"line":359},4,[306,361,362],{"class":312},"BoomboxCommand ",[306,364,317],{"class":316},[306,366,347],{"class":316},[306,368,369],{"class":350},"boombox",[306,371,354],{"class":316},[306,373,323],{"class":312},[10,375,376,377,380,381,384,385,387,388,393],{},"Edit these entries inside the existing ",[38,378,379],{},"Config"," table only in file mode. In SQL mode, use ",[38,382,383],{},"/djadmin"," → ",[14,386,231],{},". See ",[389,390,392],"a",{"href":391},"/docs/scripts/sky-dj/setup/configuration","Configuration"," before changing modes.",[10,395,396,397,400,401,24,404,407],{},"To require an item, enable ",[14,398,399],{},"Require inventory item"," and make the configured item available in your inventory catalogue. Sky DJ registers the definition and usable action through ",[38,402,403],{},"Sky.FW.RegisterItem",[38,405,406],{},"Sky.FW.RegisterUsableItem","; the selected Sky Base inventory integration handles delivery. Existing definitions are preserved. This does not add another required inventory provider or extend Sky DJ's ESX framework support.",[10,409,410,411,414,415,418],{},"For ",[38,412,413],{},"ox_inventory",", add the item to ",[38,416,417],{},"data/items.lua"," if it is not already defined:",[296,420,423],{"className":298,"code":421,"filename":422,"language":301,"meta":302,"style":302},"['sky_boombox'] = {\n    label = 'Boombox',\n    weight = 2500,\n    stack = false,\n    close = true,\n    consume = 0,\n},\n","ox_inventory — data/items.lua",[38,424,425,444,459,472,483,495,508],{"__ignoreMap":302},[306,426,427,430,432,434,436,439,441],{"class":308,"line":309},[306,428,429],{"class":312},"[",[306,431,354],{"class":316},[306,433,351],{"class":350},[306,435,354],{"class":316},[306,437,438],{"class":312},"] ",[306,440,317],{"class":316},[306,442,443],{"class":312}," {\n",[306,445,446,449,451,453,455,457],{"class":308,"line":326},[306,447,448],{"class":312},"    label ",[306,450,317],{"class":316},[306,452,347],{"class":316},[306,454,5],{"class":350},[306,456,354],{"class":316},[306,458,323],{"class":312},[306,460,461,464,466,470],{"class":308,"line":339},[306,462,463],{"class":312},"    weight ",[306,465,317],{"class":316},[306,467,469],{"class":468},"sbssI"," 2500",[306,471,323],{"class":312},[306,473,474,477,479,481],{"class":308,"line":359},[306,475,476],{"class":312},"    stack ",[306,478,317],{"class":316},[306,480,334],{"class":316},[306,482,323],{"class":312},[306,484,486,489,491,493],{"class":308,"line":485},5,[306,487,488],{"class":312},"    close ",[306,490,317],{"class":316},[306,492,320],{"class":316},[306,494,323],{"class":312},[306,496,498,501,503,506],{"class":308,"line":497},6,[306,499,500],{"class":312},"    consume ",[306,502,317],{"class":316},[306,504,505],{"class":468}," 0",[306,507,323],{"class":312},[306,509,511],{"class":308,"line":510},7,[306,512,513],{"class":312},"},\n",[10,515,516],{},"Do not add a client export, event or consuming action to this entry. Sky Base supplies the usable-item callback; Sky DJ removes the item only after successful placement. Restart the inventory after catalogue changes during your normal maintenance window. Supply items through your existing inventory or administration tools; Sky DJ does not add a shop or item-grant command.",[30,518,520],{"id":519},"limits-and-restart-recovery","Limits and restart recovery",[10,522,523,524,527],{},"The default server cap is ",[14,525,526],{},"32 deployed or stored devices",", adjustable from 1 to 64. The volume ceiling is 70%, and each client plays the nearest two audible devices by default. Global settings also control carrying and the number of simultaneous audible boomboxes.",[10,529,530,531,533],{},"Devices and outstanding item claims are journaled in SQL. Disconnecting stores the device; after a resource or server restart, devices are stored and paused. The owner can use ",[38,532,40],{}," to reclaim the recorded item and place again. Command-only devices can be cleared and placed again without an inventory return. Disabling new boombox use still allows owners to reclaim existing claims.",[10,535,536,537,541],{},"Changing the global item name does not rewrite outstanding claims: they keep their original item and metadata. Keep the boombox journal when updating. If an interrupted inventory operation requires administrator recovery, audit the inventory and journal first; see ",[389,538,540],{"href":539},"/docs/scripts/sky-dj/reference/troubleshooting","Troubleshooting",". Deleting the journal can lose legitimate claims.",[543,544,545],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":302,"searchDepth":309,"depth":326,"links":547},[548,549,550,551,552],{"id":32,"depth":326,"text":33},{"id":132,"depth":326,"text":133},{"id":220,"depth":326,"text":221},{"id":290,"depth":326,"text":291},{"id":519,"depth":326,"text":520},"Place a mobile boombox, configure inventory use, share YouTube playback and open the separate personal Spotify player.","md",null,{},true,"/docs/scripts/sky-dj/features/boombox",{"title":5,"description":553},{"loc":558},"1.docs/scripts/7.sky-dj/3.features/4.boombox","FmO1kOi9eH_2CbDTqA93oGclpRwMf0-0_xolymjcIgY",[564,569],{"title":565,"path":566,"stem":567,"description":568,"children":-1},"Lights and effects","/docs/scripts/sky-dj/features/lights-and-effects","1.docs/scripts/7.sky-dj/3.features/3.lights-and-effects","Place club fixtures, operate the festival FOH desk, synchronize lasers and pyro, and keep device OFF states and client performance under control.",{"title":570,"path":571,"stem":572,"description":573,"children":-1},"Exports","/docs/scripts/sky-dj/reference/exports","1.docs/scripts/7.sky-dj/4.reference/1.exports","Client and server audio exports with signatures, short descriptions, return values and Lua examples.",[],1792547848569]