[{"data":1,"prerenderedAt":638},["ShallowReactive",2],{"/docs/base/jobs-base/server-exports/player-interaction-actions":3,"/docs/base/jobs-base/server-exports/player-interaction-actions-surround":626,"/docs/base/jobs-base/server-exports/player-interaction-actions-implemented-suggestions":637},{"id":4,"title":5,"body":6,"description":616,"extension":617,"head":618,"implementedSuggestions":618,"meta":619,"navigation":620,"path":621,"schemaOrg":618,"seo":622,"sitemap":623,"stem":624,"__hash__":625},"docs/1.docs/base/2.jobs-base/4.server-exports/7.player-interaction-actions.md","Player Interaction Actions",{"type":7,"value":8,"toc":607},"minimark",[9,17,21,24,32,37,144,176,251,258,262,348,352,408,421,425,544,548,590,600,603],[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-actions",[10,22,23],{},"Every action export below validates the acting player's current whitelist access. Target existence, distance, vehicle state, restraint state, items, and inventory operations are also validated where applicable.",[25,26,29],"callout",{"color":27,"icon":28},"warning","i-lucide-shield-alert",[10,30,31],{},"These are trusted server-side integration points. Never forward an options table, target ID, network ID, seat, item name, amount, or metadata directly from an unvalidated client event.",[33,34,36],"h3",{"id":35},"handcuffs-and-zipties","Handcuffs and zipties",[38,39,40,56],"table",{},[41,42,43],"thead",{},[44,45,46,50,53],"tr",{},[47,48,49],"th",{},"Export",[47,51,52],{},"Returns",[47,54,55],{},"Purpose",[57,58,59,84,98,112,127],"tbody",{},[44,60,61,68,73],{},[62,63,64],"td",{},[65,66,67],"code",{},"cuffPlayer(sourceId, targetId, cuffType, options?)",[62,69,70],{},[65,71,72],{},"boolean, string?",[62,74,75,76,79,80,83],{},"Applies ",[65,77,78],{},"cuffs"," or ",[65,81,82],{},"zipties",".",[44,85,86,91,95],{},[62,87,88],{},[65,89,90],{},"uncuffPlayer(sourceId, targetId, options?)",[62,92,93],{},[65,94,72],{},[62,96,97],{},"Removes the target's current cuffs or zipties.",[44,99,100,105,109],{},[62,101,102],{},[65,103,104],{},"cutZipties(sourceId, targetId, options?)",[62,106,107],{},[65,108,72],{},[62,110,111],{},"Cuts the target's zipties with the configured cutter.",[44,113,114,119,124],{},[62,115,116],{},[65,117,118],{},"isPlayerCuffed(targetId)",[62,120,121],{},[65,122,123],{},"boolean",[62,125,126],{},"Reads the shared cuff state.",[44,128,129,134,138],{},[62,130,131],{},[65,132,133],{},"getCuffConfig()",[62,135,136],{},[65,137,38],{},[62,139,140,141,83],{},"Returns a read-only snapshot of ",[65,142,143],{},"Config.PoliceCuffs",[10,145,146,147,150,151,154,155,158,159,162,163,166,167,170,171,166,173,175],{},"Trusted options for ",[65,148,149],{},"cuffPlayer"," are ",[65,152,153],{},"ignoreItemCheck",", ",[65,156,157],{},"allowSelf",", and ",[65,160,161],{},"forceNormal",". ",[65,164,165],{},"uncuffPlayer"," and ",[65,168,169],{},"cutZipties"," accept ",[65,172,157],{},[65,174,161],{},". Whitelist and distance validation cannot be disabled.",[177,178,183],"pre",{"className":179,"code":180,"language":181,"meta":182,"style":182},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","local success, reason = exports[\"sky_jobs_base\"]:cuffPlayer(\n    source,\n    targetId,\n    \"cuffs\"\n)\n","lua","",[65,184,185,222,228,234,245],{"__ignoreMap":182},[186,187,190,194,198,201,204,207,211,213,216,219],"span",{"class":188,"line":189},"line",1,[186,191,193],{"class":192},"sMK4o","local",[186,195,197],{"class":196},"sTEyZ"," success, reason ",[186,199,200],{"class":192},"=",[186,202,203],{"class":196}," exports[",[186,205,206],{"class":192},"\"",[186,208,210],{"class":209},"sfazB","sky_jobs_base",[186,212,206],{"class":192},[186,214,215],{"class":196},"]:",[186,217,149],{"class":218},"s2Zo4",[186,220,221],{"class":196},"(\n",[186,223,225],{"class":188,"line":224},2,[186,226,227],{"class":196},"    source,\n",[186,229,231],{"class":188,"line":230},3,[186,232,233],{"class":196},"    targetId,\n",[186,235,237,240,242],{"class":188,"line":236},4,[186,238,239],{"class":192},"    \"",[186,241,78],{"class":209},[186,243,244],{"class":192},"\"\n",[186,246,248],{"class":188,"line":247},5,[186,249,250],{"class":196},")\n",[10,252,253,254,257],{},"Escape opportunities are not exposed as a forceable integration API. The server rolls and validates them from ",[65,255,256],{},"Config.PoliceCuffs.escape",", including timing, expected keys, round progression, cooldowns, and final restraint removal.",[33,259,261],{"id":260},"leg-restraints","Leg restraints",[38,263,264,274],{},[41,265,266],{},[44,267,268,270,272],{},[47,269,49],{},[47,271,52],{},[47,273,55],{},[57,275,276,290,304,318,332],{},[44,277,278,283,287],{},[62,279,280],{},[65,281,282],{},"applyLegRestraints(sourceId, targetId)",[62,284,285],{},[65,286,72],{},[62,288,289],{},"Applies leg restraints after all access and target checks.",[44,291,292,297,301],{},[62,293,294],{},[65,295,296],{},"removeLegRestraints(sourceId, targetId)",[62,298,299],{},[65,300,72],{},[62,302,303],{},"Removes the target's leg restraints.",[44,305,306,311,315],{},[62,307,308],{},[65,309,310],{},"isPlayerLegRestrained(targetId)",[62,312,313],{},[65,314,123],{},[62,316,317],{},"Reads the shared leg-restraint state.",[44,319,320,325,329],{},[62,321,322],{},[65,323,324],{},"getLegRestraintsTargetState(targetId)",[62,326,327],{},[65,328,38],{},[62,330,331],{},"Returns the target's validated cuff and leg-restraint state.",[44,333,334,339,343],{},[62,335,336],{},[65,337,338],{},"getLegRestraintsConfig()",[62,340,341],{},[65,342,38],{},[62,344,140,345,83],{},[65,346,347],{},"Config.LegRestraints",[33,349,351],{"id":350},"escort-and-vehicles","Escort and vehicles",[38,353,354,364],{},[41,355,356],{},[44,357,358,360,362],{},[47,359,49],{},[47,361,52],{},[47,363,55],{},[57,365,366,380,394],{},[44,367,368,373,377],{},[62,369,370],{},[65,371,372],{},"escortToggle(sourceId, targetId)",[62,374,375],{},[65,376,72],{},[62,378,379],{},"Starts or stops escorting a cuffed target.",[44,381,382,387,391],{},[62,383,384],{},[65,385,386],{},"escortPutInVehicle(sourceId, targetId, netId, seat)",[62,388,389],{},[65,390,72],{},[62,392,393],{},"Places an escorted target into a nearby networked vehicle.",[44,395,396,401,405],{},[62,397,398],{},[65,399,400],{},"escortTakeOutVehicle(sourceId, targetId)",[62,402,403],{},[65,404,72],{},[62,406,407],{},"Removes a nearby cuffed target from a vehicle.",[10,409,410,413,414,417,418,83],{},[65,411,412],{},"escortToggle"," requires ",[65,415,416],{},"escort","; the two vehicle exports require ",[65,419,420],{},"vehicle",[33,422,424],{"id":423},"head-bag","Head bag",[38,426,427,437],{},[41,428,429],{},[44,430,431,433,435],{},[47,432,49],{},[47,434,52],{},[47,436,55],{},[57,438,439,463,477,491,505,528],{},[44,440,441,446,450],{},[62,442,443],{},[65,444,445],{},"useHeadBag(sourceId, targetId, action)",[62,447,448],{},[65,449,72],{},[62,451,452,453,154,456,459,460,83],{},"Uses ",[65,454,455],{},"apply",[65,457,458],{},"remove",", or ",[65,461,462],{},"toggle",[44,464,465,470,474],{},[62,466,467],{},[65,468,469],{},"applyHeadBag(sourceId, targetId)",[62,471,472],{},[65,473,72],{},[62,475,476],{},"Applies a head bag.",[44,478,479,484,488],{},[62,480,481],{},[65,482,483],{},"removeHeadBag(sourceId, targetId)",[62,485,486],{},[65,487,72],{},[62,489,490],{},"Removes a head bag.",[44,492,493,498,502],{},[62,494,495],{},[65,496,497],{},"isPlayerHeadBagged(targetId)",[62,499,500],{},[65,501,123],{},[62,503,504],{},"Reads the shared head-bag state.",[44,506,507,512,516],{},[62,508,509],{},[65,510,511],{},"getHeadBagTargetState(targetId)",[62,513,514],{},[65,515,38],{},[62,517,518,519,154,522,158,525,83],{},"Returns ",[65,520,521],{},"success",[65,523,524],{},"hooded",[65,526,527],{},"restrained",[44,529,530,535,539],{},[62,531,532],{},[65,533,534],{},"getHeadBagConfig()",[62,536,537],{},[65,538,38],{},[62,540,140,541,83],{},[65,542,543],{},"Config.HeadBag",[33,545,547],{"id":546},"player-search","Player search",[38,549,550,560],{},[41,551,552],{},[44,553,554,556,558],{},[47,555,49],{},[47,557,52],{},[47,559,55],{},[57,561,562,576],{},[44,563,564,569,573],{},[62,565,566],{},[65,567,568],{},"getSearchTargetInventory(sourceId, targetId)",[62,570,571],{},[65,572,38],{},[62,574,575],{},"Returns the validated target inventory and weapons.",[44,577,578,583,587],{},[62,579,580],{},[65,581,582],{},"searchTransfer(sourceId, targetId, transferType, name, amount, metadata?)",[62,584,585],{},[65,586,38],{},[62,588,589],{},"Transfers a validated item from the target to the acting player.",[10,591,592,595,596,599],{},[65,593,594],{},"searchTransfer"," currently accepts only ",[65,597,598],{},"transferType = \"storage\"",". The target must remain nearby and restrained for the initial read and every transfer.",[601,602],"br",{},[604,605,606],"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 .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":182,"searchDepth":189,"depth":224,"links":608},[609],{"id":20,"depth":224,"text":5,"children":610},[611,612,613,614,615],{"id":35,"depth":230,"text":36},{"id":260,"depth":230,"text":261},{"id":350,"depth":230,"text":351},{"id":423,"depth":230,"text":424},{"id":546,"depth":230,"text":547},"Reference for Player Interaction Actions in sky_jobs_base.","md",null,{},true,"/docs/base/jobs-base/server-exports/player-interaction-actions",{"title":5,"description":616},{"loc":621},"1.docs/base/2.jobs-base/4.server-exports/7.player-interaction-actions","g-hOWPQIeXEgLsFC_SB3bwEPtx78ad7OqDRAQ46DbIo",[627,632],{"title":628,"path":629,"stem":630,"description":631,"children":-1},"Player Interaction Whitelist","/docs/base/jobs-base/server-exports/player-interaction-whitelist","1.docs/base/2.jobs-base/4.server-exports/6.player-interaction-whitelist","Reference for Player Interaction Whitelist in sky_jobs_base.",{"title":633,"path":634,"stem":635,"description":636,"children":-1},"Gallery","/docs/base/jobs-base/server-exports/gallery","1.docs/base/2.jobs-base/4.server-exports/8.gallery","Reference for Gallery in sky_jobs_base.",[],1791814181874]