[{"data":1,"prerenderedAt":558},["ShallowReactive",2],{"navigation_docs":3,"-client-addons-garage":145,"-client-addons-garage-surround":553},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":129,"body":147,"description":157,"extension":547,"links":548,"meta":549,"navigation":550,"path":130,"seo":551,"stem":131,"__hash__":552},"docs\u002F4.client-addons\u002F6.garage.md",{"type":148,"value":149,"toc":536},"minimark",[150,154,158,163,180,195,199,208,215,219,309,313,403,407,457,460,464,467,478,482,485,501,504,508,511,515,532],[151,152,129],"h1",{"id":153},"client-garage-usage-guide",[155,156,157],"p",{},"The client garage addon provides player vehicle storage UI, vehicle\nstore\u002Fretrieve actions, selected nearby vehicle service requests, vehicle\ncontext building, and the virtual garage view.",[159,160,162],"h2",{"id":161},"open-garage-ui","Open Garage UI",[164,165,170],"pre",{"className":166,"code":167,"language":168,"meta":169,"style":169},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","call forge_client_garage_fnc_openUI;\n","sqf","",[171,172,173],"code",{"__ignoreMap":169},[174,175,178],"span",{"class":176,"line":177},"line",1,[174,179,167],{},[155,181,182,183,186,187,190,191,194],{},"The garage UI opens ",[171,184,185],{},"RscGarage",", loads ",[171,188,189],{},"ui\u002F_site\u002Findex.html",", and routes\nbrowser events through ",[171,192,193],{},"forge_client_garage_fnc_handleUIEvents",".",[159,196,198],{"id":197},"open-virtual-garage","Open Virtual Garage",[164,200,202],{"className":166,"code":201,"language":168,"meta":169,"style":169},"call forge_client_garage_fnc_openVG;\n",[171,203,204],{"__ignoreMap":169},[174,205,206],{"class":176,"line":177},[174,207,201],{},[155,209,210,211,214],{},"The virtual garage uses mission-configured ",[171,212,213],{},"FORGE_CfgGarages"," locations to set\nthe spawn\u002Fpreview position, opens the BIS garage interface, and restricts the\navailable vehicle lists from the virtual garage repository.",[159,216,218],{"id":217},"client-services","Client Services",[220,221,222,235],"table",{},[223,224,225],"thead",{},[226,227,228,232],"tr",{},[229,230,231],"th",{},"Service",[229,233,234],{},"Purpose",[236,237,238,249,259,269,279,289,299],"tbody",{},[226,239,240,246],{},[241,242,243],"td",{},[171,244,245],{},"GarageRepository",[241,247,248],{},"Player garage view state.",[226,250,251,256],{},[241,252,253],{},[171,254,255],{},"VGRepository",[241,257,258],{},"Virtual garage unlock view state.",[226,260,261,266],{},[241,262,263],{},[171,264,265],{},"GarageHelperService",[241,267,268],{},"Vehicle names, hit points, and payload helpers.",[226,270,271,276],{},[241,272,273],{},[171,274,275],{},"GarageContextService",[241,277,278],{},"Nearby\u002Fcurrent vehicle context.",[226,280,281,286],{},[241,282,283],{},[171,284,285],{},"GaragePayloadService",[241,287,288],{},"Browser hydrate payload construction.",[226,290,291,296],{},[241,292,293],{},[171,294,295],{},"GarageActionService",[241,297,298],{},"Store\u002Fretrieve request handling and selected nearby vehicle refuel\u002Frepair request forwarding.",[226,300,301,306],{},[241,302,303],{},[171,304,305],{},"GarageUIBridge",[241,307,308],{},"Browser ready, hydrate, and sync delivery.",[159,310,312],{"id":311},"browser-events","Browser Events",[220,314,315,325],{},[223,316,317],{},[226,318,319,322],{},[229,320,321],{},"Event",[229,323,324],{},"Client behavior",[236,326,327,340,353,363,373,383,393],{},[226,328,329,334],{},[241,330,331],{},[171,332,333],{},"garage::ready",[241,335,336,337,194],{},"Mark browser ready and send ",[171,338,339],{},"garage::hydrate",[226,341,342,347],{},[241,343,344],{},[171,345,346],{},"garage::refresh",[241,348,349,350,194],{},"Send current garage payload as ",[171,351,352],{},"garage::sync",[226,354,355,360],{},[241,356,357],{},[171,358,359],{},"garage::vehicle::retrieve::request",[241,361,362],{},"Forward retrieve request through the action service.",[226,364,365,370],{},[241,366,367],{},[171,368,369],{},"garage::vehicle::store::request",[241,371,372],{},"Forward store request through the action service.",[226,374,375,380],{},[241,376,377],{},[171,378,379],{},"garage::vehicle::refuel::request",[241,381,382],{},"Forward selected nearby vehicle refuel request to the server economy service.",[226,384,385,390],{},[241,386,387],{},[171,388,389],{},"garage::vehicle::repair::request",[241,391,392],{},"Forward selected nearby vehicle repair request to the server economy service.",[226,394,395,400],{},[241,396,397],{},[171,398,399],{},"garage::close",[241,401,402],{},"Dispose bridge screen state and close the display.",[159,404,406],{"id":405},"browser-response-events","Browser Response Events",[220,408,409,417],{},[223,410,411],{},[226,412,413,415],{},[229,414,321],{},[229,416,234],{},[236,418,419,428,437,447],{},[226,420,421,425],{},[241,422,423],{},[171,424,339],{},[241,426,427],{},"Initial vehicle and session payload.",[226,429,430,434],{},[241,431,432],{},[171,433,352],{},[241,435,436],{},"Refreshed vehicle payload.",[226,438,439,444],{},[241,440,441],{},[171,442,443],{},"garage::service::success",[241,445,446],{},"Browser notice for accepted refuel\u002Frepair requests.",[226,448,449,454],{},[241,450,451],{},[171,452,453],{},"garage::service::failure",[241,455,456],{},"Browser notice for rejected refuel\u002Frepair requests.",[155,458,459],{},"Server action responses are handled by the action service and notification\nflow.",[159,461,463],{"id":462},"vehicle-service","Vehicle Service",[155,465,466],{},"The selected vehicle detail panel includes refuel and repair actions for nearby\nworld vehicles. Stored records must be retrieved first because server economy\nservices operate on live vehicle objects, not stored garage records.",[155,468,469,470,473,474,477],{},"Refuel requests use the server economy ",[171,471,472],{},"RefuelService"," event. Repair requests\nuse the server economy ",[171,475,476],{},"RepairService"," event. Both services are billed by the\nserver economy addon through organization funds.",[159,479,481],{"id":480},"mission-setup","Mission Setup",[155,483,484],{},"Garage interactions are normally surfaced through the actor menu when nearby\nobjects have garage variables such as:",[164,486,488],{"className":166,"code":487,"language":168,"meta":169,"style":169},"_object setVariable [\"isGarage\", true, true];\n_object setVariable [\"garageType\", \"cars\", true];\n",[171,489,490,495],{"__ignoreMap":169},[174,491,492],{"class":176,"line":177},[174,493,494],{},"_object setVariable [\"isGarage\", true, true];\n",[174,496,498],{"class":176,"line":497},2,[174,499,500],{},"_object setVariable [\"garageType\", \"cars\", true];\n",[155,502,503],{},"Virtual garage access also requires configured garage locations in mission\nconfig so the preview\u002Fspawn position can be resolved.",[159,505,507],{"id":506},"authoritative-state","Authoritative State",[155,509,510],{},"The client gathers vehicle context and sends store\u002Fretrieve requests. Stored\nvehicle state, validation, spawning, removal, and persistence are owned by the\nserver garage addon and extension.",[159,512,514],{"id":513},"related-guides","Related Guides",[516,517,518,524,528],"ul",{},[519,520,521],"li",{},[522,523,73],"a",{"href":74},[519,525,526],{},[522,527,117],{"href":118},[519,529,530],{},[522,531,137],{"href":138},[533,534,535],"style",{},"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);}",{"title":169,"searchDepth":497,"depth":497,"links":537},[538,539,540,541,542,543,544,545,546],{"id":161,"depth":497,"text":162},{"id":197,"depth":497,"text":198},{"id":217,"depth":497,"text":218},{"id":311,"depth":497,"text":312},{"id":405,"depth":497,"text":406},{"id":462,"depth":497,"text":463},{"id":480,"depth":497,"text":481},{"id":506,"depth":497,"text":507},{"id":513,"depth":497,"text":514},"md",null,{},true,{"title":129,"description":157},"FjY4rI8r7pbcqenAYzqgitXP9qYdvwrTtKlyd4O8aw8",[554,556],{"title":125,"path":126,"stem":127,"description":555,"children":-1},"The client CAD addon provides the map and dispatch UI for groups, active\ntasks, task assignment, dispatch orders, support requests, and task\nacknowledge\u002Fdecline workflows.",{"title":133,"path":134,"stem":135,"description":557,"children":-1},"The client locker addon manages personal locker display state, local locker\ncontainer behavior, and virtual arsenal unlock state.",1776806627742]