[{"data":1,"prerenderedAt":948},["ShallowReactive",2],{"/docs/base/jobs-base/server-exports/storage":3,"/docs/base/jobs-base/server-exports/storage-surround":935,"/docs/base/jobs-base/server-exports/storage-implemented-suggestions":947},{"id":4,"title":5,"body":6,"description":926,"extension":927,"head":928,"implementedSuggestions":928,"meta":929,"navigation":191,"path":930,"schemaOrg":928,"seo":931,"sitemap":932,"stem":933,"__hash__":934},"docs/1.docs/base/2.jobs-base/4.server-exports/10.storage.md","Storage",{"type":7,"value":8,"toc":918},"minimark",[9,17,21,29,36,104,242,248,306,403,409,480,577,583,650,764,775,904,911,914],[10,11,12],"p",{},[13,14,16],"a",{"href":15},"/docs/base/jobs-base/server-exports","All server exports",[18,19,5],"h2",{"id":20},"storage",[10,22,23,24,28],{},"Use the actual target storage station ID. The ",[25,26,27],"code",{},"stationId"," on a wholesale order identifies the ordering location and can differ from the delivery storage. These exports use the supplied job and grade context; the calling server script must authorize its own player-facing requests.",[30,31,33],"h3",{"id":32},"getstorageitemcountstationid-jobname-grade-name",[25,34,35],{},"GetStorageItemCount(stationId, jobName, grade, name)",[37,38,39,47,90],"ul",{},[40,41,42,46],"li",{},[43,44,45],"strong",{},"Purpose",": Counts how many items with the given name are currently available in one station storage. Metadata does not split the result; matching stacks are added together.",[40,48,49,52,53],{},[43,50,51],{},"Arguments",":\n",[37,54,55,64,73,82],{},[40,56,57,59,60,63],{},[25,58,27],{}," (",[25,61,62],{},"string | number",") - target station ID.",[40,65,66,59,69,72],{},[25,67,68],{},"jobName",[25,70,71],{},"string",") - job name used for storage restrictions.",[40,74,75,59,78,81],{},[25,76,77],{},"grade",[25,79,80],{},"number?",") - job grade context.",[40,83,84,59,87,89],{},[25,85,86],{},"name",[25,88,71],{},") - item name to count.",[40,91,92,95,96,99,100,103],{},[43,93,94],{},"Returns",": ",[25,97,98],{},"number"," - total available amount, or ",[25,101,102],{},"0"," when the station or item is missing.",[105,106,111],"pre",{"className":107,"code":108,"language":109,"meta":110,"style":110},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","local wheels = exports[\"sky_jobs_base\"]:GetStorageItemCount(\"station_1\", \"mechanic\", 2, \"wheels\")\n\nif wheels > 0 then\n    print((\"Storage has %d wheel kits\"):format(wheels))\nend\n","lua","",[25,112,113,186,193,211,236],{"__ignoreMap":110},[114,115,118,122,126,129,132,135,139,141,144,148,151,153,156,158,161,163,166,168,170,174,176,178,181,183],"span",{"class":116,"line":117},"line",1,[114,119,121],{"class":120},"sMK4o","local",[114,123,125],{"class":124},"sTEyZ"," wheels ",[114,127,128],{"class":120},"=",[114,130,131],{"class":124}," exports[",[114,133,134],{"class":120},"\"",[114,136,138],{"class":137},"sfazB","sky_jobs_base",[114,140,134],{"class":120},[114,142,143],{"class":124},"]:",[114,145,147],{"class":146},"s2Zo4","GetStorageItemCount",[114,149,150],{"class":124},"(",[114,152,134],{"class":120},[114,154,155],{"class":137},"station_1",[114,157,134],{"class":120},[114,159,160],{"class":124},", ",[114,162,134],{"class":120},[114,164,165],{"class":137},"mechanic",[114,167,134],{"class":120},[114,169,160],{"class":124},[114,171,173],{"class":172},"sbssI","2",[114,175,160],{"class":124},[114,177,134],{"class":120},[114,179,180],{"class":137},"wheels",[114,182,134],{"class":120},[114,184,185],{"class":124},")\n",[114,187,189],{"class":116,"line":188},2,[114,190,192],{"emptyLinePlaceholder":191},true,"\n",[114,194,196,200,202,205,208],{"class":116,"line":195},3,[114,197,199],{"class":198},"s7zQu","if",[114,201,125],{"class":124},[114,203,204],{"class":120},">",[114,206,207],{"class":172}," 0",[114,209,210],{"class":198}," then\n",[114,212,214,217,220,222,225,227,230,233],{"class":116,"line":213},4,[114,215,216],{"class":146},"    print",[114,218,219],{"class":124},"((",[114,221,134],{"class":120},[114,223,224],{"class":137},"Storage has %d wheel kits",[114,226,134],{"class":120},[114,228,229],{"class":124},"):",[114,231,232],{"class":146},"format",[114,234,235],{"class":124},"(wheels))\n",[114,237,239],{"class":116,"line":238},5,[114,240,241],{"class":198},"end\n",[30,243,245],{"id":244},"removestorageitemstationid-jobname-grade-name-amount",[25,246,247],{},"RemoveStorageItem(stationId, jobName, grade, name, amount)",[37,249,250,255,294],{},[40,251,252,254],{},[43,253,45],{},": Removes a trusted amount of an item directly from station storage. This is intended for server-side job resources that already validated the player, station, and workflow.",[40,256,257,52,259],{},[43,258,51],{},[37,260,261,267,273,279,286],{},[40,262,263,59,265,63],{},[25,264,27],{},[25,266,62],{},[40,268,269,59,271,72],{},[25,270,68],{},[25,272,71],{},[40,274,275,59,277,81],{},[25,276,77],{},[25,278,80],{},[40,280,281,59,283,285],{},[25,282,86],{},[25,284,71],{},") - item name to remove.",[40,287,288,59,291,293],{},[25,289,290],{},"amount",[25,292,98],{},") - positive item count.",[40,295,296,95,298,301,302,305],{},[43,297,94],{},[25,299,300],{},"boolean"," - ",[25,303,304],{},"true"," when the requested amount was removed.",[105,307,309],{"className":107,"code":308,"language":109,"meta":110,"style":110},"local removed = exports[\"sky_jobs_base\"]:RemoveStorageItem(\"station_1\", \"mechanic\", 2, \"wheels\", 1)\n\nif not removed then\n    print(\"Not enough wheel kits in storage\")\nend\n",[25,310,311,368,372,384,399],{"__ignoreMap":110},[114,312,313,315,318,320,322,324,326,328,330,333,335,337,339,341,343,345,347,349,351,353,355,357,359,361,363,366],{"class":116,"line":117},[114,314,121],{"class":120},[114,316,317],{"class":124}," removed ",[114,319,128],{"class":120},[114,321,131],{"class":124},[114,323,134],{"class":120},[114,325,138],{"class":137},[114,327,134],{"class":120},[114,329,143],{"class":124},[114,331,332],{"class":146},"RemoveStorageItem",[114,334,150],{"class":124},[114,336,134],{"class":120},[114,338,155],{"class":137},[114,340,134],{"class":120},[114,342,160],{"class":124},[114,344,134],{"class":120},[114,346,165],{"class":137},[114,348,134],{"class":120},[114,350,160],{"class":124},[114,352,173],{"class":172},[114,354,160],{"class":124},[114,356,134],{"class":120},[114,358,180],{"class":137},[114,360,134],{"class":120},[114,362,160],{"class":124},[114,364,365],{"class":172},"1",[114,367,185],{"class":124},[114,369,370],{"class":116,"line":188},[114,371,192],{"emptyLinePlaceholder":191},[114,373,374,376,379,381],{"class":116,"line":195},[114,375,199],{"class":198},[114,377,378],{"class":120}," not",[114,380,317],{"class":124},[114,382,383],{"class":198},"then\n",[114,385,386,388,390,392,395,397],{"class":116,"line":213},[114,387,216],{"class":146},[114,389,150],{"class":124},[114,391,134],{"class":120},[114,393,394],{"class":137},"Not enough wheel kits in storage",[114,396,134],{"class":120},[114,398,185],{"class":124},[114,400,401],{"class":116,"line":238},[114,402,241],{"class":198},[30,404,406],{"id":405},"addstorageitemstationid-jobname-grade-name-amount-metadata",[25,407,408],{},"AddStorageItem(stationId, jobName, grade, name, amount, metadata?)",[37,410,411,416,467],{},[40,412,413,415],{},[43,414,45],{},": Adds an item or weapon stack directly to station storage. The export validates input, job and station availability, and storage capacity before writing.",[40,417,418,52,420],{},[43,419,51],{},[37,421,422,428,434,440,447,458],{},[40,423,424,59,426,63],{},[25,425,27],{},[25,427,62],{},[40,429,430,59,432,72],{},[25,431,68],{},[25,433,71],{},[40,435,436,59,438,81],{},[25,437,77],{},[25,439,80],{},[40,441,442,59,444,446],{},[25,443,86],{},[25,445,71],{},") - item name.",[40,448,449,59,451,453,454,457],{},[25,450,290],{},[25,452,98],{},") - positive whole number, at most ",[25,455,456],{},"2147483647",".",[40,459,460,59,463,466],{},[25,461,462],{},"metadata",[25,464,465],{},"table?",") - optional item metadata.",[40,468,469,95,471,301,473,475,476,479],{},[43,470,94],{},[25,472,300],{},[25,474,304],{}," when the database write succeeds; ",[25,477,478],{},"false"," on rejected input, insufficient capacity, or a failed write.",[105,481,483],{"className":107,"code":482,"language":109,"meta":110,"style":110},"local ok = exports[\"sky_jobs_base\"]:AddStorageItem(\n    \"station_1\",\n    \"mechanic\",\n    2,\n    \"repair_crate\",\n    1,\n    { quality = 100 }\n)\n",[25,484,485,510,522,532,539,550,558,572],{"__ignoreMap":110},[114,486,487,489,492,494,496,498,500,502,504,507],{"class":116,"line":117},[114,488,121],{"class":120},[114,490,491],{"class":124}," ok ",[114,493,128],{"class":120},[114,495,131],{"class":124},[114,497,134],{"class":120},[114,499,138],{"class":137},[114,501,134],{"class":120},[114,503,143],{"class":124},[114,505,506],{"class":146},"AddStorageItem",[114,508,509],{"class":124},"(\n",[114,511,512,515,517,519],{"class":116,"line":188},[114,513,514],{"class":120},"    \"",[114,516,155],{"class":137},[114,518,134],{"class":120},[114,520,521],{"class":124},",\n",[114,523,524,526,528,530],{"class":116,"line":195},[114,525,514],{"class":120},[114,527,165],{"class":137},[114,529,134],{"class":120},[114,531,521],{"class":124},[114,533,534,537],{"class":116,"line":213},[114,535,536],{"class":172},"    2",[114,538,521],{"class":124},[114,540,541,543,546,548],{"class":116,"line":238},[114,542,514],{"class":120},[114,544,545],{"class":137},"repair_crate",[114,547,134],{"class":120},[114,549,521],{"class":124},[114,551,553,556],{"class":116,"line":552},6,[114,554,555],{"class":172},"    1",[114,557,521],{"class":124},[114,559,561,564,566,569],{"class":116,"line":560},7,[114,562,563],{"class":124},"    { quality ",[114,565,128],{"class":120},[114,567,568],{"class":172}," 100",[114,570,571],{"class":124}," }\n",[114,573,575],{"class":116,"line":574},8,[114,576,185],{"class":124},[30,578,580],{"id":579},"addstorageitemsstationid-jobname-grade-items",[25,581,582],{},"AddStorageItems(stationId, jobName, grade, items)",[37,584,585,590,638],{},[40,586,587,589],{},[43,588,45],{},": Adds multiple item or weapon stacks to station storage with one database statement. All entries and the total capacity are checked before writing; an invalid entry rejects the entire batch.",[40,591,592,52,594],{},[43,593,51],{},[37,595,596,602,608,614],{},[40,597,598,59,600,63],{},[25,599,27],{},[25,601,62],{},[40,603,604,59,606,72],{},[25,605,68],{},[25,607,71],{},[40,609,610,59,612,81],{},[25,611,77],{},[25,613,80],{},[40,615,616,59,619,622,623,625,626,628,629,632,633,635,636,457],{},[25,617,618],{},"items",[25,620,621],{},"table[]",") - dense array of 1–200 entries with ",[25,624,86],{},", a positive whole-number ",[25,627,290],{}," or ",[25,630,631],{},"quantity"," (at most ",[25,634,456],{},"), and optional ",[25,637,462],{},[40,639,640,95,642,301,644,646,647,649],{},[43,641,94],{},[25,643,300],{},[25,645,304],{}," when the complete batch is written; ",[25,648,478],{}," when validation or the database write fails.",[105,651,653],{"className":107,"code":652,"language":109,"meta":110,"style":110},"local ok = exports[\"sky_jobs_base\"]:AddStorageItems(\"station_1\", \"mechanic\", 2, {\n    { name = \"repair_crate\", amount = 1, metadata = { quality = 100 } },\n    { name = \"cleaning_kit\", quantity = 2 }\n})\n",[25,654,655,699,736,759],{"__ignoreMap":110},[114,656,657,659,661,663,665,667,669,671,673,676,678,680,682,684,686,688,690,692,694,696],{"class":116,"line":117},[114,658,121],{"class":120},[114,660,491],{"class":124},[114,662,128],{"class":120},[114,664,131],{"class":124},[114,666,134],{"class":120},[114,668,138],{"class":137},[114,670,134],{"class":120},[114,672,143],{"class":124},[114,674,675],{"class":146},"AddStorageItems",[114,677,150],{"class":124},[114,679,134],{"class":120},[114,681,155],{"class":137},[114,683,134],{"class":120},[114,685,160],{"class":124},[114,687,134],{"class":120},[114,689,165],{"class":137},[114,691,134],{"class":120},[114,693,160],{"class":124},[114,695,173],{"class":172},[114,697,698],{"class":124},", {\n",[114,700,701,704,706,709,711,713,716,718,721,724,726,729,731,733],{"class":116,"line":188},[114,702,703],{"class":124},"    { name ",[114,705,128],{"class":120},[114,707,708],{"class":120}," \"",[114,710,545],{"class":137},[114,712,134],{"class":120},[114,714,715],{"class":124},", amount ",[114,717,128],{"class":120},[114,719,720],{"class":172}," 1",[114,722,723],{"class":124},", metadata ",[114,725,128],{"class":120},[114,727,728],{"class":124}," { quality ",[114,730,128],{"class":120},[114,732,568],{"class":172},[114,734,735],{"class":124}," } },\n",[114,737,738,740,742,744,747,749,752,754,757],{"class":116,"line":195},[114,739,703],{"class":124},[114,741,128],{"class":120},[114,743,708],{"class":120},[114,745,746],{"class":137},"cleaning_kit",[114,748,134],{"class":120},[114,750,751],{"class":124},", quantity ",[114,753,128],{"class":120},[114,755,756],{"class":172}," 2",[114,758,571],{"class":124},[114,760,761],{"class":116,"line":213},[114,762,763],{"class":124},"})\n",[10,765,766,767,770,771,774],{},"Weapons use the same exports. For unique serial numbers, provide one entry per weapon with ",[25,768,769],{},"amount = 1"," and its own ",[25,772,773],{},"metadata.serial",":",[105,776,778],{"className":107,"code":777,"language":109,"meta":110,"style":110},"local ok = exports[\"sky_jobs_base\"]:AddStorageItems(\"police_storage\", \"police\", 4, {\n    { name = \"weapon_pistol\", amount = 1, metadata = { serial = \"DELIVERY-001\" } },\n    { name = \"weapon_pistol\", amount = 1, metadata = { serial = \"DELIVERY-002\" } }\n})\n",[25,779,780,825,864,900],{"__ignoreMap":110},[114,781,782,784,786,788,790,792,794,796,798,800,802,804,807,809,811,813,816,818,820,823],{"class":116,"line":117},[114,783,121],{"class":120},[114,785,491],{"class":124},[114,787,128],{"class":120},[114,789,131],{"class":124},[114,791,134],{"class":120},[114,793,138],{"class":137},[114,795,134],{"class":120},[114,797,143],{"class":124},[114,799,675],{"class":146},[114,801,150],{"class":124},[114,803,134],{"class":120},[114,805,806],{"class":137},"police_storage",[114,808,134],{"class":120},[114,810,160],{"class":124},[114,812,134],{"class":120},[114,814,815],{"class":137},"police",[114,817,134],{"class":120},[114,819,160],{"class":124},[114,821,822],{"class":172},"4",[114,824,698],{"class":124},[114,826,827,829,831,833,836,838,840,842,844,846,848,851,853,855,858,861],{"class":116,"line":188},[114,828,703],{"class":124},[114,830,128],{"class":120},[114,832,708],{"class":120},[114,834,835],{"class":137},"weapon_pistol",[114,837,134],{"class":120},[114,839,715],{"class":124},[114,841,128],{"class":120},[114,843,720],{"class":172},[114,845,723],{"class":124},[114,847,128],{"class":120},[114,849,850],{"class":124}," { serial ",[114,852,128],{"class":120},[114,854,708],{"class":120},[114,856,857],{"class":137},"DELIVERY-001",[114,859,860],{"class":120},"\" ",[114,862,863],{"class":124},"} },\n",[114,865,866,868,870,872,874,876,878,880,882,884,886,888,890,892,895,897],{"class":116,"line":195},[114,867,703],{"class":124},[114,869,128],{"class":120},[114,871,708],{"class":120},[114,873,835],{"class":137},[114,875,134],{"class":120},[114,877,715],{"class":124},[114,879,128],{"class":120},[114,881,720],{"class":172},[114,883,723],{"class":124},[114,885,128],{"class":120},[114,887,850],{"class":124},[114,889,128],{"class":120},[114,891,708],{"class":120},[114,893,894],{"class":137},"DELIVERY-002",[114,896,860],{"class":120},[114,898,899],{"class":124},"} }\n",[114,901,902],{"class":116,"line":213},[114,903,763],{"class":124},[10,905,906,907,910],{},"Neither storage export completes a wholesale order. Call ",[25,908,909],{},"CompleteWholesaleOrder"," after successful delivery and keep a persistent delivery record in the external script to prevent duplicate deposits. Storage writes and order status updates are separate operations, without a shared transaction.",[912,913],"br",{},[915,916,917],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}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":110,"searchDepth":117,"depth":188,"links":919},[920],{"id":20,"depth":188,"text":5,"children":921},[922,923,924,925],{"id":32,"depth":195,"text":35},{"id":244,"depth":195,"text":247},{"id":405,"depth":195,"text":408},{"id":579,"depth":195,"text":582},"Reference for Storage in sky_jobs_base.","md",null,{},"/docs/base/jobs-base/server-exports/storage",{"title":5,"description":926},{"loc":930},"1.docs/base/2.jobs-base/4.server-exports/10.storage","0ROq-VPJnfrqzMAc_iSNUWmp1-pp4mFJTk7zbV-6QDA",[936,942],{"title":937,"path":938,"stem":939,"description":940,"icon":941,"children":-1},"Emergency Dispatch","/docs/base/jobs-base/server-exports/emergency-dispatch","1.docs/base/2.jobs-base/4.server-exports/1.emergency-dispatch","Public server-side exports and adapter events for Dispatch incidents, calls, and response plans.","i-lucide-siren",{"title":943,"path":944,"stem":945,"description":946,"children":-1},"External Garage Integration","/docs/base/jobs-base/server-exports/external-garage-integration","1.docs/base/2.jobs-base/4.server-exports/11.external-garage-integration","Reference for External Garage Integration in sky_jobs_base.",[],1791814183126]