- Created package.json for Docus with necessary scripts and dependencies. - Implemented sync-docus-docs.mjs to automate the generation of documentation files from source markdown. - Defined mappings for generated pages and virtual routes to ensure proper linking in documentation. - Added static content files for the documentation structure, including navigation and index pages.
1 line
27 KiB
JSON
1 line
27 KiB
JSON
[{"data":1,"prerenderedAt":1212},["ShallowReactive",2],{"navigation_docs":3,"-server-modules-locker":145,"-server-modules-locker-surround":1207},[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":77,"body":147,"description":1201,"extension":1202,"links":1203,"meta":1204,"navigation":525,"path":78,"seo":1205,"stem":79,"__hash__":1206},"docs\u002F3.server-modules\u002F6.locker.md",{"type":148,"value":149,"toc":1189},"minimark",[150,154,162,167,170,282,285,333,337,344,493,497,504,552,556,561,653,657,665,710,714,719,742,746,976,980,985,1046,1050,1061,1144,1147,1151,1185],[151,152,77],"h1",{"id":153},"locker-usage-guide",[155,156,157,158,161],"p",{},"The locker module stores physical player inventory items by classname. It is\nseparate from the virtual arsenal unlock module documented in\n",[159,160,85],"a",{"href":86},".",[163,164,166],"h2",{"id":165},"storage-model","Storage Model",[155,168,169],{},"Locker data is persisted through SurrealDB by the server extension.",[171,172,177],"pre",{"className":173,"code":174,"language":175,"meta":176,"style":176},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"arifle_MX_F\": {\n \"category\": \"weapon\",\n \"classname\": \"arifle_MX_F\",\n \"amount\": 1\n }\n}\n","json","",[178,179,180,189,208,234,254,270,276],"code",{"__ignoreMap":176},[181,182,185],"span",{"class":183,"line":184},"line",1,[181,186,188],{"class":187},"sMK4o","{\n",[181,190,192,195,199,202,205],{"class":183,"line":191},2,[181,193,194],{"class":187}," \"",[181,196,198],{"class":197},"spNyl","arifle_MX_F",[181,200,201],{"class":187},"\"",[181,203,204],{"class":187},":",[181,206,207],{"class":187}," {\n",[181,209,211,214,218,220,222,225,229,231],{"class":183,"line":210},3,[181,212,213],{"class":187}," \"",[181,215,217],{"class":216},"sBMFI","category",[181,219,201],{"class":187},[181,221,204],{"class":187},[181,223,224],{"class":187}," \"",[181,226,228],{"class":227},"sfazB","weapon",[181,230,201],{"class":187},[181,232,233],{"class":187},",\n",[181,235,237,239,242,244,246,248,250,252],{"class":183,"line":236},4,[181,238,213],{"class":187},[181,240,241],{"class":216},"classname",[181,243,201],{"class":187},[181,245,204],{"class":187},[181,247,224],{"class":187},[181,249,198],{"class":227},[181,251,201],{"class":187},[181,253,233],{"class":187},[181,255,257,259,262,264,266],{"class":183,"line":256},5,[181,258,213],{"class":187},[181,260,261],{"class":216},"amount",[181,263,201],{"class":187},[181,265,204],{"class":187},[181,267,269],{"class":268},"sbssI"," 1\n",[181,271,273],{"class":183,"line":272},6,[181,274,275],{"class":187}," }\n",[181,277,279],{"class":183,"line":278},7,[181,280,281],{"class":187},"}\n",[155,283,284],{},"Rules validated by the Rust service:",[286,287,288,292,300,308,314,328],"ul",{},[289,290,291],"li",{},"A locker can contain up to 25 unique classnames.",[289,293,294,296,297,299],{},[178,295,217],{}," and ",[178,298,241],{}," cannot be empty.",[289,301,302,304,305,161],{},[178,303,261],{}," must be greater than ",[178,306,307],{},"0",[289,309,310,313],{},[178,311,312],{},"locker:add"," creates an empty locker automatically when one does not exist.",[289,315,316,319,320,323,324,327],{},[178,317,318],{},"locker:get",", ",[178,321,322],{},"locker:patch",", and ",[178,325,326],{},"locker:remove"," require an existing locker.",[289,329,330,332],{},[178,331,326],{}," takes the classname directly, not a JSON object.",[163,334,336],{"id":335},"commands","Commands",[155,338,339,340,343],{},"All commands are called on the ",[178,341,342],{},"locker"," group.",[345,346,347,363],"table",{},[348,349,350],"thead",{},[351,352,353,357,360],"tr",{},[354,355,356],"th",{},"Command",[354,358,359],{},"Arguments",[354,361,362],{},"Returns",[364,365,366,382,395,411,428,443,457,473],"tbody",{},[351,367,368,374,379],{},[369,370,371],"td",{},[178,372,373],{},"locker:create",[369,375,376],{},[178,377,378],{},"uid",[369,380,381],{},"Empty item map as JSON.",[351,383,384,388,392],{},[369,385,386],{},[178,387,318],{},[369,389,390],{},[178,391,378],{},[369,393,394],{},"Item map as JSON.",[351,396,397,401,408],{},[369,398,399],{},[178,400,312],{},[369,402,403,319,405],{},[178,404,378],{},[178,406,407],{},"item_json",[369,409,410],{},"Updated item map as JSON.",[351,412,413,418,425],{},[369,414,415],{},[178,416,417],{},"locker:update",[369,419,420,319,422],{},[178,421,378],{},[178,423,424],{},"items_json",[369,426,427],{},"Replaced item map as JSON.",[351,429,430,434,441],{},[369,431,432],{},[178,433,322],{},[369,435,436,319,438],{},[178,437,378],{},[178,439,440],{},"patch_json",[369,442,410],{},[351,444,445,449,455],{},[369,446,447],{},[178,448,326],{},[369,450,451,319,453],{},[178,452,378],{},[178,454,241],{},[369,456,410],{},[351,458,459,464,468],{},[369,460,461],{},[178,462,463],{},"locker:delete",[369,465,466],{},[178,467,378],{},[369,469,470,161],{},[178,471,472],{},"OK",[351,474,475,480,484],{},[369,476,477],{},[178,478,479],{},"locker:exists",[369,481,482],{},[178,483,378],{},[369,485,486,489,490,161],{},[178,487,488],{},"true"," or ",[178,491,492],{},"false",[163,494,496],{"id":495},"error-handling","Error Handling",[155,498,499,500,503],{},"Every command returns a string payload. Always check for the ",[178,501,502],{},"Error:"," prefix\nbefore parsing JSON.",[171,505,509],{"className":506,"code":507,"language":508,"meta":176,"style":176},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _result = \"forge_server\" callExtension [\"locker:get\", [getPlayerUID player]];\nprivate _payload = _result select 0;\n\nif (_payload find \"Error:\" == 0) exitWith {\n systemChat format [\"Locker error: %1\", _payload];\n};\n\nprivate _locker = fromJSON _payload;\n","sqf",[178,510,511,516,521,527,532,537,542,546],{"__ignoreMap":176},[181,512,513],{"class":183,"line":184},[181,514,515],{},"private _result = \"forge_server\" callExtension [\"locker:get\", [getPlayerUID player]];\n",[181,517,518],{"class":183,"line":191},[181,519,520],{},"private _payload = _result select 0;\n",[181,522,523],{"class":183,"line":210},[181,524,526],{"emptyLinePlaceholder":525},true,"\n",[181,528,529],{"class":183,"line":236},[181,530,531],{},"if (_payload find \"Error:\" == 0) exitWith {\n",[181,533,534],{"class":183,"line":256},[181,535,536],{}," systemChat format [\"Locker error: %1\", _payload];\n",[181,538,539],{"class":183,"line":272},[181,540,541],{},"};\n",[181,543,544],{"class":183,"line":278},[181,545,526],{"emptyLinePlaceholder":525},[181,547,549],{"class":183,"line":548},8,[181,550,551],{},"private _locker = fromJSON _payload;\n",[163,553,555],{"id":554},"add-an-item","Add an Item",[155,557,558,560],{},[178,559,312],{}," creates or overwrites one classname entry.",[171,562,564],{"className":506,"code":563,"language":508,"meta":176,"style":176},"private _item = createHashMapFromArray [\n [\"category\", \"weapon\"],\n [\"classname\", \"arifle_MX_F\"],\n [\"amount\", 1]\n];\n\nprivate _result = \"forge_server\" callExtension [\"locker:add\", [\n getPlayerUID player,\n toJSON _item\n]];\n\nprivate _payload = _result select 0;\nif (_payload find \"Error:\" == 0) exitWith {\n hint format [\"Failed to store item: %1\", _payload];\n};\n\nprivate _locker = fromJSON _payload;\n",[178,565,566,571,576,581,586,591,595,600,605,611,617,622,627,632,638,643,648],{"__ignoreMap":176},[181,567,568],{"class":183,"line":184},[181,569,570],{},"private _item = createHashMapFromArray [\n",[181,572,573],{"class":183,"line":191},[181,574,575],{}," [\"category\", \"weapon\"],\n",[181,577,578],{"class":183,"line":210},[181,579,580],{}," [\"classname\", \"arifle_MX_F\"],\n",[181,582,583],{"class":183,"line":236},[181,584,585],{}," [\"amount\", 1]\n",[181,587,588],{"class":183,"line":256},[181,589,590],{},"];\n",[181,592,593],{"class":183,"line":272},[181,594,526],{"emptyLinePlaceholder":525},[181,596,597],{"class":183,"line":278},[181,598,599],{},"private _result = \"forge_server\" callExtension [\"locker:add\", [\n",[181,601,602],{"class":183,"line":548},[181,603,604],{}," getPlayerUID player,\n",[181,606,608],{"class":183,"line":607},9,[181,609,610],{}," toJSON _item\n",[181,612,614],{"class":183,"line":613},10,[181,615,616],{},"]];\n",[181,618,620],{"class":183,"line":619},11,[181,621,526],{"emptyLinePlaceholder":525},[181,623,625],{"class":183,"line":624},12,[181,626,520],{},[181,628,630],{"class":183,"line":629},13,[181,631,531],{},[181,633,635],{"class":183,"line":634},14,[181,636,637],{}," hint format [\"Failed to store item: %1\", _payload];\n",[181,639,641],{"class":183,"line":640},15,[181,642,541],{},[181,644,646],{"class":183,"line":645},16,[181,647,526],{"emptyLinePlaceholder":525},[181,649,651],{"class":183,"line":650},17,[181,652,551],{},[163,654,656],{"id":655},"patch-an-amount","Patch an Amount",[155,658,659,661,662,664],{},[178,660,322],{}," currently patches the ",[178,663,261],{}," field for an existing classname.",[171,666,668],{"className":506,"code":667,"language":508,"meta":176,"style":176},"private _patch = createHashMapFromArray [\n [\"classname\", \"arifle_MX_F\"],\n [\"amount\", 5]\n];\n\nprivate _result = \"forge_server\" callExtension [\"locker:patch\", [\n getPlayerUID player,\n toJSON _patch\n]];\n",[178,669,670,675,679,684,688,692,697,701,706],{"__ignoreMap":176},[181,671,672],{"class":183,"line":184},[181,673,674],{},"private _patch = createHashMapFromArray [\n",[181,676,677],{"class":183,"line":191},[181,678,580],{},[181,680,681],{"class":183,"line":210},[181,682,683],{}," [\"amount\", 5]\n",[181,685,686],{"class":183,"line":236},[181,687,590],{},[181,689,690],{"class":183,"line":256},[181,691,526],{"emptyLinePlaceholder":525},[181,693,694],{"class":183,"line":272},[181,695,696],{},"private _result = \"forge_server\" callExtension [\"locker:patch\", [\n",[181,698,699],{"class":183,"line":278},[181,700,604],{},[181,702,703],{"class":183,"line":548},[181,704,705],{}," toJSON _patch\n",[181,707,708],{"class":183,"line":607},[181,709,616],{},[163,711,713],{"id":712},"remove-an-item","Remove an Item",[155,715,716,718],{},[178,717,326],{}," takes the classname as the second argument.",[171,720,722],{"className":506,"code":721,"language":508,"meta":176,"style":176},"private _result = \"forge_server\" callExtension [\"locker:remove\", [\n getPlayerUID player,\n \"arifle_MX_F\"\n]];\n",[178,723,724,729,733,738],{"__ignoreMap":176},[181,725,726],{"class":183,"line":184},[181,727,728],{},"private _result = \"forge_server\" callExtension [\"locker:remove\", [\n",[181,730,731],{"class":183,"line":191},[181,732,604],{},[181,734,735],{"class":183,"line":210},[181,736,737],{}," \"arifle_MX_F\"\n",[181,739,740],{"class":183,"line":236},[181,741,616],{},[163,743,745],{"id":744},"retrieve-an-item","Retrieve an Item",[171,747,749],{"className":506,"code":748,"language":508,"meta":176,"style":176},"fnc_retrieveLockerItem = {\n params [\"_classname\"];\n\n private _result = \"forge_server\" callExtension [\"locker:get\", [getPlayerUID player]];\n private _payload = _result select 0;\n\n if (_payload find \"Error:\" == 0) exitWith {\n hint format [\"Failed to load locker: %1\", _payload];\n false\n };\n\n private _locker = fromJSON _payload;\n private _item = _locker getOrDefault [_classname, createHashMap];\n if (_item isEqualTo createHashMap) exitWith {\n hint \"Item was not found in your locker.\";\n false\n };\n\n private _amount = _item getOrDefault [\"amount\", 0];\n if (_amount \u003C= 0) exitWith {\n hint \"Item is out of stock.\";\n false\n };\n\n if !(player canAdd _classname) exitWith {\n hint \"Not enough inventory space.\";\n false\n };\n\n player addItem _classname;\n\n if (_amount > 1) then {\n private _patch = createHashMapFromArray [\n [\"classname\", _classname],\n [\"amount\", _amount - 1]\n ];\n \"forge_server\" callExtension [\"locker:patch\", [getPlayerUID player, toJSON _patch]];\n } else {\n \"forge_server\" callExtension [\"locker:remove\", [getPlayerUID player, _classname]];\n };\n\n true\n};\n",[178,750,751,756,761,765,770,775,779,784,789,794,799,803,808,813,818,823,827,831,836,842,848,854,859,864,869,875,881,886,891,896,902,907,913,919,925,931,937,943,949,955,960,965,971],{"__ignoreMap":176},[181,752,753],{"class":183,"line":184},[181,754,755],{},"fnc_retrieveLockerItem = {\n",[181,757,758],{"class":183,"line":191},[181,759,760],{}," params [\"_classname\"];\n",[181,762,763],{"class":183,"line":210},[181,764,526],{"emptyLinePlaceholder":525},[181,766,767],{"class":183,"line":236},[181,768,769],{}," private _result = \"forge_server\" callExtension [\"locker:get\", [getPlayerUID player]];\n",[181,771,772],{"class":183,"line":256},[181,773,774],{}," private _payload = _result select 0;\n",[181,776,777],{"class":183,"line":272},[181,778,526],{"emptyLinePlaceholder":525},[181,780,781],{"class":183,"line":278},[181,782,783],{}," if (_payload find \"Error:\" == 0) exitWith {\n",[181,785,786],{"class":183,"line":548},[181,787,788],{}," hint format [\"Failed to load locker: %1\", _payload];\n",[181,790,791],{"class":183,"line":607},[181,792,793],{}," false\n",[181,795,796],{"class":183,"line":613},[181,797,798],{}," };\n",[181,800,801],{"class":183,"line":619},[181,802,526],{"emptyLinePlaceholder":525},[181,804,805],{"class":183,"line":624},[181,806,807],{}," private _locker = fromJSON _payload;\n",[181,809,810],{"class":183,"line":629},[181,811,812],{}," private _item = _locker getOrDefault [_classname, createHashMap];\n",[181,814,815],{"class":183,"line":634},[181,816,817],{}," if (_item isEqualTo createHashMap) exitWith {\n",[181,819,820],{"class":183,"line":640},[181,821,822],{}," hint \"Item was not found in your locker.\";\n",[181,824,825],{"class":183,"line":645},[181,826,793],{},[181,828,829],{"class":183,"line":650},[181,830,798],{},[181,832,834],{"class":183,"line":833},18,[181,835,526],{"emptyLinePlaceholder":525},[181,837,839],{"class":183,"line":838},19,[181,840,841],{}," private _amount = _item getOrDefault [\"amount\", 0];\n",[181,843,845],{"class":183,"line":844},20,[181,846,847],{}," if (_amount \u003C= 0) exitWith {\n",[181,849,851],{"class":183,"line":850},21,[181,852,853],{}," hint \"Item is out of stock.\";\n",[181,855,857],{"class":183,"line":856},22,[181,858,793],{},[181,860,862],{"class":183,"line":861},23,[181,863,798],{},[181,865,867],{"class":183,"line":866},24,[181,868,526],{"emptyLinePlaceholder":525},[181,870,872],{"class":183,"line":871},25,[181,873,874],{}," if !(player canAdd _classname) exitWith {\n",[181,876,878],{"class":183,"line":877},26,[181,879,880],{}," hint \"Not enough inventory space.\";\n",[181,882,884],{"class":183,"line":883},27,[181,885,793],{},[181,887,889],{"class":183,"line":888},28,[181,890,798],{},[181,892,894],{"class":183,"line":893},29,[181,895,526],{"emptyLinePlaceholder":525},[181,897,899],{"class":183,"line":898},30,[181,900,901],{}," player addItem _classname;\n",[181,903,905],{"class":183,"line":904},31,[181,906,526],{"emptyLinePlaceholder":525},[181,908,910],{"class":183,"line":909},32,[181,911,912],{}," if (_amount > 1) then {\n",[181,914,916],{"class":183,"line":915},33,[181,917,918],{}," private _patch = createHashMapFromArray [\n",[181,920,922],{"class":183,"line":921},34,[181,923,924],{}," [\"classname\", _classname],\n",[181,926,928],{"class":183,"line":927},35,[181,929,930],{}," [\"amount\", _amount - 1]\n",[181,932,934],{"class":183,"line":933},36,[181,935,936],{}," ];\n",[181,938,940],{"class":183,"line":939},37,[181,941,942],{}," \"forge_server\" callExtension [\"locker:patch\", [getPlayerUID player, toJSON _patch]];\n",[181,944,946],{"class":183,"line":945},38,[181,947,948],{}," } else {\n",[181,950,952],{"class":183,"line":951},39,[181,953,954],{}," \"forge_server\" callExtension [\"locker:remove\", [getPlayerUID player, _classname]];\n",[181,956,958],{"class":183,"line":957},40,[181,959,798],{},[181,961,963],{"class":183,"line":962},41,[181,964,526],{"emptyLinePlaceholder":525},[181,966,968],{"class":183,"line":967},42,[181,969,970],{}," true\n",[181,972,974],{"class":183,"line":973},43,[181,975,541],{},[163,977,979],{"id":978},"replace-the-whole-locker","Replace the Whole Locker",[155,981,982,984],{},[178,983,417],{}," replaces the whole item map. Use it for explicit bulk syncs,\nnot single-item changes.",[171,986,988],{"className":506,"code":987,"language":508,"meta":176,"style":176},"private _items = createHashMapFromArray [\n [\"arifle_MX_F\", createHashMapFromArray [\n [\"category\", \"weapon\"],\n [\"classname\", \"arifle_MX_F\"],\n [\"amount\", 1]\n ]]\n];\n\nprivate _result = \"forge_server\" callExtension [\"locker:update\", [\n getPlayerUID player,\n toJSON _items\n]];\n",[178,989,990,995,1000,1005,1010,1015,1020,1024,1028,1033,1037,1042],{"__ignoreMap":176},[181,991,992],{"class":183,"line":184},[181,993,994],{},"private _items = createHashMapFromArray [\n",[181,996,997],{"class":183,"line":191},[181,998,999],{}," [\"arifle_MX_F\", createHashMapFromArray [\n",[181,1001,1002],{"class":183,"line":210},[181,1003,1004],{}," [\"category\", \"weapon\"],\n",[181,1006,1007],{"class":183,"line":236},[181,1008,1009],{}," [\"classname\", \"arifle_MX_F\"],\n",[181,1011,1012],{"class":183,"line":256},[181,1013,1014],{}," [\"amount\", 1]\n",[181,1016,1017],{"class":183,"line":272},[181,1018,1019],{}," ]]\n",[181,1021,1022],{"class":183,"line":278},[181,1023,590],{},[181,1025,1026],{"class":183,"line":548},[181,1027,526],{"emptyLinePlaceholder":525},[181,1029,1030],{"class":183,"line":607},[181,1031,1032],{},"private _result = \"forge_server\" callExtension [\"locker:update\", [\n",[181,1034,1035],{"class":183,"line":613},[181,1036,604],{},[181,1038,1039],{"class":183,"line":619},[181,1040,1041],{}," toJSON _items\n",[181,1043,1044],{"class":183,"line":624},[181,1045,616],{},[163,1047,1049],{"id":1048},"hot-state","Hot State",[155,1051,1052,1053,1056,1057,1060],{},"The ",[178,1054,1055],{},"locker:hot:*"," commands keep a runtime copy of a player's locker and write\nit back only when ",[178,1058,1059],{},"locker:hot:save"," runs.",[345,1062,1063,1073],{},[348,1064,1065],{},[351,1066,1067,1069,1071],{},[354,1068,356],{},[354,1070,359],{},[354,1072,362],{},[364,1074,1075,1088,1101,1116,1129],{},[351,1076,1077,1082,1086],{},[369,1078,1079],{},[178,1080,1081],{},"locker:hot:init",[369,1083,1084],{},[178,1085,378],{},[369,1087,394],{},[351,1089,1090,1095,1099],{},[369,1091,1092],{},[178,1093,1094],{},"locker:hot:get",[369,1096,1097],{},[178,1098,378],{},[369,1100,394],{},[351,1102,1103,1108,1114],{},[369,1104,1105],{},[178,1106,1107],{},"locker:hot:override",[369,1109,1110,319,1112],{},[178,1111,378],{},[178,1113,424],{},[369,1115,394],{},[351,1117,1118,1122,1126],{},[369,1119,1120],{},[178,1121,1059],{},[369,1123,1124],{},[178,1125,378],{},[369,1127,1128],{},"Current hot item map as JSON.",[351,1130,1131,1136,1140],{},[369,1132,1133],{},[178,1134,1135],{},"locker:hot:remove",[369,1137,1138],{},[178,1139,378],{},[369,1141,1142,161],{},[178,1143,472],{},[155,1145,1146],{},"Use hot state for session-heavy locker workflows. Use the durable commands for\nsimple item deposits and withdrawals.",[163,1148,1150],{"id":1149},"best-practices","Best Practices",[286,1152,1153,1168,1174,1179,1182],{},[289,1154,1155,1156,319,1158,319,1161,1164,1165,161],{},"Keep categories normalized, for example ",[178,1157,228],{},[178,1159,1160],{},"magazine",[178,1162,1163],{},"item",", or\n",[178,1166,1167],{},"backpack",[289,1169,1170,1171,1173],{},"Use ",[178,1172,322],{}," for quantity changes.",[289,1175,1170,1176,1178],{},[178,1177,326],{}," when quantity reaches zero.",[289,1180,1181],{},"Treat the locker response as a hash map keyed by classname.",[289,1183,1184],{},"Check capacity before bulk operations that may exceed 25 unique items.",[1186,1187,1188],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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":176,"searchDepth":191,"depth":191,"links":1190},[1191,1192,1193,1194,1195,1196,1197,1198,1199,1200],{"id":165,"depth":191,"text":166},{"id":335,"depth":191,"text":336},{"id":495,"depth":191,"text":496},{"id":554,"depth":191,"text":555},{"id":655,"depth":191,"text":656},{"id":712,"depth":191,"text":713},{"id":744,"depth":191,"text":745},{"id":978,"depth":191,"text":979},{"id":1048,"depth":191,"text":1049},{"id":1149,"depth":191,"text":1150},"The locker module stores physical player inventory items by classname. It is\nseparate from the virtual arsenal unlock module documented in\nOwned Storage Usage Guide.","md",null,{},{"title":77,"description":1201},"yRC1-bz2AkCaQBkRxr04sEYnq81grmtAwyDVDqAvkaM",[1208,1210],{"title":73,"path":74,"stem":75,"description":1209,"children":-1},"The garage module stores physical player vehicles. Each record keeps the\nvehicle classname, generated plate UUID, fuel, overall damage, and detailed hit\npoint damage.",{"title":81,"path":82,"stem":83,"description":1211,"children":-1},"The organization module stores organization records, members, assets, fleet\nentries, and credit lines. Durable commands manage persisted records directly.\nHot-state commands support the active organization UI workflows.",1776805514938] |