[{"data":1,"prerenderedAt":631},["ShallowReactive",2],{"/docs/base/jobs-base/server-exports/player-interaction-whitelist":3,"/docs/base/jobs-base/server-exports/player-interaction-whitelist-surround":618,"/docs/base/jobs-base/server-exports/player-interaction-whitelist-implemented-suggestions":630},{"id":4,"title":5,"body":6,"description":609,"extension":610,"head":611,"implementedSuggestions":611,"meta":612,"navigation":429,"path":613,"schemaOrg":611,"seo":614,"sitemap":615,"stem":616,"__hash__":617},"docs/1.docs/base/2.jobs-base/4.server-exports/6.player-interaction-whitelist.md","Player Interaction Whitelist",{"type":7,"value":8,"toc":602},"minimark",[9,17,21,24,47,54,102,105,205,478,486,489,495,498,530,537,543,546,584,598],[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},"player-interaction-whitelist",[10,22,23],{},"Shared player interactions are job-whitelisted. Register the jobs owned by your resource before using any player-interaction client or server export. Registration authorizes existing jobs only; it does not create framework jobs or Sky Jobs groups.",[10,25,26,30,31,34,35,38,39,42,43,46],{},[27,28,29],"code",{},"sky_policejob"," automatically registers its configured Police jobs with the ",[27,32,33],{},"police"," policy from ",[27,36,37],{},"Config.JobPlayerInteractions",". ",[27,40,41],{},"sky_crimesystem"," does the same for its Crime jobs and the ",[27,44,45],{},"crime"," policy. Both refresh their registration after Job Configurator updates.",[48,49,51],"h3",{"id":50},"registerinteractionjobsgroupkey-jobs-permissions",[27,52,53],{},"registerInteractionJobs(groupKey, jobs, permissions?)",[55,56,57,68,81,96],"ul",{},[58,59,60,63,64,67],"li",{},[27,61,62],{},"groupKey"," (",[27,65,66],{},"string",") - unique key owned by the calling resource.",[58,69,70,63,73,76,77,80],{},[27,71,72],{},"jobs",[27,74,75],{},"string[] | table[]",") - job names or job definitions containing a ",[27,78,79],{},"name",".",[58,82,83,63,86,89,90,92,93,80],{},[27,84,85],{},"permissions",[27,87,88],{},"table?",") - required for custom groups. It may be omitted when ",[27,91,62],{}," already has a policy in ",[27,94,95],{},"Config.JobPlayerInteractions.groups",[58,97,98,99,80],{},"Returns ",[27,100,101],{},"boolean, string?",[10,103,104],{},"Supported permission fields:",[106,107,108,121],"table",{},[109,110,111],"thead",{},[112,113,114,118],"tr",{},[115,116,117],"th",{},"Field",[115,119,120],{},"Purpose",[122,123,124,135,145,155,165,175,185,195],"tbody",{},[112,125,126,132],{},[127,128,129],"td",{},[27,130,131],{},"requireOnDuty",[127,133,134],{},"Requires the current player to be on duty for every enabled action.",[112,136,137,142],{},[127,138,139],{},[27,140,141],{},"cuffs",[127,143,144],{},"Apply and remove handcuffs.",[112,146,147,152],{},[127,148,149],{},[27,150,151],{},"zipties",[127,153,154],{},"Apply, remove, and cut zipties.",[112,156,157,162],{},[127,158,159],{},[27,160,161],{},"legRestraints",[127,163,164],{},"Apply and remove leg restraints.",[112,166,167,172],{},[127,168,169],{},[27,170,171],{},"escort",[127,173,174],{},"Start and stop escorting a restrained player.",[112,176,177,182],{},[127,178,179],{},[27,180,181],{},"vehicle",[127,183,184],{},"Place escorted players in vehicles or remove restrained players from vehicles.",[112,186,187,192],{},[127,188,189],{},[27,190,191],{},"headBag",[127,193,194],{},"Apply and remove head bags.",[112,196,197,202],{},[127,198,199],{},[27,200,201],{},"search",[127,203,204],{},"Open and transfer items through player search.",[206,207,212],"pre",{"className":208,"code":209,"language":210,"meta":211,"style":211},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","local registered, reason = exports[\"sky_jobs_base\"]:registerInteractionJobs(\n    \"security\",\n    {\n        \"security\",\n        { name = \"security_night\" }\n    },\n    {\n        requireOnDuty = true,\n        cuffs = true,\n        zipties = false,\n        legRestraints = true,\n        escort = true,\n        vehicle = true,\n        headBag = false,\n        search = true\n    }\n)\n\nif not registered then\n    print((\"Unable to register security interactions: %s\"):format(reason))\nend\n","lua","",[27,213,214,252,266,272,284,304,310,315,328,340,353,365,377,389,401,412,418,424,431,447,472],{"__ignoreMap":211},[215,216,219,223,227,230,233,236,240,242,245,249],"span",{"class":217,"line":218},"line",1,[215,220,222],{"class":221},"sMK4o","local",[215,224,226],{"class":225},"sTEyZ"," registered, reason ",[215,228,229],{"class":221},"=",[215,231,232],{"class":225}," exports[",[215,234,235],{"class":221},"\"",[215,237,239],{"class":238},"sfazB","sky_jobs_base",[215,241,235],{"class":221},[215,243,244],{"class":225},"]:",[215,246,248],{"class":247},"s2Zo4","registerInteractionJobs",[215,250,251],{"class":225},"(\n",[215,253,255,258,261,263],{"class":217,"line":254},2,[215,256,257],{"class":221},"    \"",[215,259,260],{"class":238},"security",[215,262,235],{"class":221},[215,264,265],{"class":225},",\n",[215,267,269],{"class":217,"line":268},3,[215,270,271],{"class":225},"    {\n",[215,273,275,278,280,282],{"class":217,"line":274},4,[215,276,277],{"class":221},"        \"",[215,279,260],{"class":238},[215,281,235],{"class":221},[215,283,265],{"class":225},[215,285,287,290,292,295,298,301],{"class":217,"line":286},5,[215,288,289],{"class":225},"        { name ",[215,291,229],{"class":221},[215,293,294],{"class":221}," \"",[215,296,297],{"class":238},"security_night",[215,299,300],{"class":221},"\" ",[215,302,303],{"class":225},"}\n",[215,305,307],{"class":217,"line":306},6,[215,308,309],{"class":225},"    },\n",[215,311,313],{"class":217,"line":312},7,[215,314,271],{"class":225},[215,316,318,321,323,326],{"class":217,"line":317},8,[215,319,320],{"class":225},"        requireOnDuty ",[215,322,229],{"class":221},[215,324,325],{"class":221}," true",[215,327,265],{"class":225},[215,329,331,334,336,338],{"class":217,"line":330},9,[215,332,333],{"class":225},"        cuffs ",[215,335,229],{"class":221},[215,337,325],{"class":221},[215,339,265],{"class":225},[215,341,343,346,348,351],{"class":217,"line":342},10,[215,344,345],{"class":225},"        zipties ",[215,347,229],{"class":221},[215,349,350],{"class":221}," false",[215,352,265],{"class":225},[215,354,356,359,361,363],{"class":217,"line":355},11,[215,357,358],{"class":225},"        legRestraints ",[215,360,229],{"class":221},[215,362,325],{"class":221},[215,364,265],{"class":225},[215,366,368,371,373,375],{"class":217,"line":367},12,[215,369,370],{"class":225},"        escort ",[215,372,229],{"class":221},[215,374,325],{"class":221},[215,376,265],{"class":225},[215,378,380,383,385,387],{"class":217,"line":379},13,[215,381,382],{"class":225},"        vehicle ",[215,384,229],{"class":221},[215,386,325],{"class":221},[215,388,265],{"class":225},[215,390,392,395,397,399],{"class":217,"line":391},14,[215,393,394],{"class":225},"        headBag ",[215,396,229],{"class":221},[215,398,350],{"class":221},[215,400,265],{"class":225},[215,402,404,407,409],{"class":217,"line":403},15,[215,405,406],{"class":225},"        search ",[215,408,229],{"class":221},[215,410,411],{"class":221}," true\n",[215,413,415],{"class":217,"line":414},16,[215,416,417],{"class":225},"    }\n",[215,419,421],{"class":217,"line":420},17,[215,422,423],{"class":225},")\n",[215,425,427],{"class":217,"line":426},18,[215,428,430],{"emptyLinePlaceholder":429},true,"\n",[215,432,434,438,441,444],{"class":217,"line":433},19,[215,435,437],{"class":436},"s7zQu","if",[215,439,440],{"class":221}," not",[215,442,443],{"class":225}," registered ",[215,445,446],{"class":436},"then\n",[215,448,450,453,456,458,461,463,466,469],{"class":217,"line":449},20,[215,451,452],{"class":247},"    print",[215,454,455],{"class":225},"((",[215,457,235],{"class":221},[215,459,460],{"class":238},"Unable to register security interactions: %s",[215,462,235],{"class":221},[215,464,465],{"class":225},"):",[215,467,468],{"class":247},"format",[215,470,471],{"class":225},"(reason))\n",[215,473,475],{"class":217,"line":474},21,[215,476,477],{"class":436},"end\n",[479,480,483],"callout",{"color":481,"icon":482},"warning","i-lucide-triangle-alert",[10,484,485],{},"Call this export from a server script during resource startup, after the final job list is known. Call it again when your resource changes that list at runtime. Group keys are resource-owned, registrations are removed when the owner resource stops, and another resource cannot overwrite the same key.",[10,487,488],{},"Registering jobs only grants the selected interaction capabilities to players whose current job matches the registration. It does not execute an action, bypass item requirements, or trust client input.",[48,490,492],{"id":491},"unregisterinteractionjobsgroupkey",[27,493,494],{},"unregisterInteractionJobs(groupKey)",[10,496,497],{},"Removes a group registered by the calling resource.",[206,499,501],{"className":208,"code":500,"language":210,"meta":211,"style":211},"exports[\"sky_jobs_base\"]:unregisterInteractionJobs(\"security\")\n",[27,502,503],{"__ignoreMap":211},[215,504,505,508,510,512,514,516,519,522,524,526,528],{"class":217,"line":218},[215,506,507],{"class":225},"exports[",[215,509,235],{"class":221},[215,511,239],{"class":238},[215,513,235],{"class":221},[215,515,244],{"class":225},[215,517,518],{"class":247},"unregisterInteractionJobs",[215,520,521],{"class":225},"(",[215,523,235],{"class":221},[215,525,260],{"class":238},[215,527,235],{"class":221},[215,529,423],{"class":225},[10,531,532,533,536],{},"The export returns ",[27,534,535],{},"false, \"not_owner\""," if another resource owns the group.",[48,538,540],{"id":539},"hasinteractionaccesssourceid-permission",[27,541,542],{},"hasInteractionAccess(sourceId, permission)",[10,544,545],{},"Checks the same server-authoritative job and duty policy used by the interaction actions.",[206,547,549],{"className":208,"code":548,"language":210,"meta":211,"style":211},"local allowed, reason = exports[\"sky_jobs_base\"]:hasInteractionAccess(source, \"search\")\n",[27,550,551],{"__ignoreMap":211},[215,552,553,555,558,560,562,564,566,568,570,573,576,578,580,582],{"class":217,"line":218},[215,554,222],{"class":221},[215,556,557],{"class":225}," allowed, reason ",[215,559,229],{"class":221},[215,561,232],{"class":225},[215,563,235],{"class":221},[215,565,239],{"class":238},[215,567,235],{"class":221},[215,569,244],{"class":225},[215,571,572],{"class":247},"hasInteractionAccess",[215,574,575],{"class":225},"(source, ",[215,577,235],{"class":221},[215,579,201],{"class":238},[215,581,235],{"class":221},[215,583,423],{"class":225},[10,585,586,587,590,591,594,595,80],{},"Possible failure reasons include ",[27,588,589],{},"not_authorized",", ",[27,592,593],{},"not_on_duty",", and ",[27,596,597],{},"invalid_permission",[599,600,601],"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 .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":211,"searchDepth":218,"depth":254,"links":603},[604],{"id":20,"depth":254,"text":5,"children":605},[606,607,608],{"id":50,"depth":268,"text":53},{"id":491,"depth":268,"text":494},{"id":539,"depth":268,"text":542},"Reference for Player Interaction Whitelist in sky_jobs_base.","md",null,{},"/docs/base/jobs-base/server-exports/player-interaction-whitelist",{"title":5,"description":609},{"loc":613},"1.docs/base/2.jobs-base/4.server-exports/6.player-interaction-whitelist","SpTwC6Shj4JfMBrjVsdrQFrZr-9rkC7YLwES12oP2vw",[619,625],{"title":620,"path":621,"stem":622,"description":623,"icon":624,"children":-1},"Sky Billing","/docs/base/jobs-base/server-exports/billing","1.docs/base/2.jobs-base/4.server-exports/5.billing","Create player and society invoices, including automated invoices without an online issuer.","i-lucide-receipt",{"title":626,"path":627,"stem":628,"description":629,"children":-1},"Player Interaction Actions","/docs/base/jobs-base/server-exports/player-interaction-actions","1.docs/base/2.jobs-base/4.server-exports/7.player-interaction-actions","Reference for Player Interaction Actions in sky_jobs_base.",[],1791814181826]