[{"data":1,"prerenderedAt":722},["ShallowReactive",2],{"/docs/jobs/policejob/reference/events":3,"/docs/jobs/policejob/reference/events-surround":709,"/docs/jobs/policejob/reference/events-implemented-suggestions":721},{"id":4,"title":5,"body":6,"description":698,"extension":699,"head":700,"implementedSuggestions":700,"meta":701,"navigation":702,"path":704,"schemaOrg":700,"seo":705,"sitemap":706,"stem":707,"__hash__":708},"docs/1.docs/0.jobs/1.policejob/4.reference/4.events.md","Events",{"type":7,"value":8,"toc":688},"minimark",[9,13,18,23,32,44,134,137,143,146,211,216,219,238,246,249,294,299,302,321,326,329,348,353,356,375,379,383,386,459,463,531,535,585,589,653,657,660,668,672,675,684],[10,11,12],"p",{},"Events on this page either invoke an already validated built-in interaction flow or publish read-only presentation state. They do not grant Police permissions or mutate an Advanced Speed Camera review.",[14,15,17],"h2",{"id":16},"police-interaction-events","Police interaction events",[19,20,22],"h3",{"id":21},"client-events","Client Events",[10,24,25,26,31],{},"These events can be triggered from other resources to interact with the police job on the client side. They mirror the ",[27,28,30],"a",{"href":29},"./exports#client-exports","client exports"," for resources that prefer events over export calls.",[10,33,34,35,39,40,43],{},"The local player's job must already be registered through the server-side\n",[36,37,38],"code",{},"registerInteractionJobs"," export and have the required capability. Police jobs from ",[36,41,42],{},"Config.Jobs","\nare registered automatically. Triggering one of these events does not bypass the shared whitelist,\nduty policy, item checks, or server validation.",[45,46,47,60],"table",{},[48,49,50],"thead",{},[51,52,53,57],"tr",{},[54,55,56],"th",{},"Event",[54,58,59],{},"Description",[61,62,63,74,84,94,104,114,124],"tbody",{},[51,64,65,71],{},[66,67,68],"td",{},[36,69,70],{},"sky_policejob:client:cuffPlayer",[66,72,73],{},"Apply cuffs or zipties to the nearest valid player as an officer.",[51,75,76,81],{},[66,77,78],{},[36,79,80],{},"sky_policejob:client:uncuffPlayer",[66,82,83],{},"Remove cuffs from the nearest player as an officer.",[51,85,86,91],{},[66,87,88],{},[36,89,90],{},"sky_policejob:client:useCuffPlayer",[66,92,93],{},"Compatibility alias for the cuff action; uses the same whitelist.",[51,95,96,101],{},[66,97,98],{},[36,99,100],{},"sky_policejob:client:useUncuffPlayer",[66,102,103],{},"Compatibility alias for the uncuff action; uses the same whitelist.",[51,105,106,111],{},[66,107,108],{},[36,109,110],{},"sky_policejob:client:escortToggle",[66,112,113],{},"Start or stop escorting the nearest player.",[51,115,116,121],{},[66,117,118],{},[36,119,120],{},"sky_policejob:client:escortPutInVehicle",[66,122,123],{},"Put the escorted player into the closest vehicle.",[51,125,126,131],{},[66,127,128],{},[36,129,130],{},"sky_policejob:client:escortTakeOutVehicle",[66,132,133],{},"Take the escorted player out of a vehicle.",[135,136],"hr",{},[138,139,141],"h4",{"id":140},"sky_policejobclientcuffplayer",[36,142,70],{},[10,144,145],{},"Applies restraints to the nearest valid player. Accepts an optional cuff type.",[147,148,154],"pre",{"className":149,"code":150,"filename":151,"language":152,"meta":153,"style":153},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","TriggerEvent(\"sky_policejob:client:cuffPlayer\") -- cuffs\nTriggerEvent(\"sky_policejob:client:cuffPlayer\", \"zipties\")\n","client.lua","lua","",[36,155,156,185],{"__ignoreMap":153},[157,158,161,165,169,173,176,178,181],"span",{"class":159,"line":160},"line",1,[157,162,164],{"class":163},"s2Zo4","TriggerEvent",[157,166,168],{"class":167},"sTEyZ","(",[157,170,172],{"class":171},"sMK4o","\"",[157,174,70],{"class":175},"sfazB",[157,177,172],{"class":171},[157,179,180],{"class":167},") ",[157,182,184],{"class":183},"sHwdD","-- cuffs\n",[157,186,188,190,192,194,196,198,201,203,206,208],{"class":159,"line":187},2,[157,189,164],{"class":163},[157,191,168],{"class":167},[157,193,172],{"class":171},[157,195,70],{"class":175},[157,197,172],{"class":171},[157,199,200],{"class":167},", ",[157,202,172],{"class":171},[157,204,205],{"class":175},"zipties",[157,207,172],{"class":171},[157,209,210],{"class":167},")\n",[138,212,214],{"id":213},"sky_policejobclientuncuffplayer",[36,215,80],{},[10,217,218],{},"Removes cuffs or zipties from the nearest player.",[147,220,222],{"className":149,"code":221,"filename":151,"language":152,"meta":153,"style":153},"TriggerEvent(\"sky_policejob:client:uncuffPlayer\")\n",[36,223,224],{"__ignoreMap":153},[157,225,226,228,230,232,234,236],{"class":159,"line":160},[157,227,164],{"class":163},[157,229,168],{"class":167},[157,231,172],{"class":171},[157,233,80],{"class":175},[157,235,172],{"class":171},[157,237,210],{"class":167},[138,239,241,243,244],{"id":240},"sky_policejobclientusecuffplayer-sky_policejobclientuseuncuffplayer",[36,242,90],{}," / ",[36,245,100],{},[10,247,248],{},"Compatibility aliases for the regular cuff and uncuff events. They use the same registered-job\naccess policy and server checks. Failures show a notification to the player.",[147,250,252],{"className":149,"code":251,"filename":151,"language":152,"meta":153,"style":153},"TriggerEvent(\"sky_policejob:client:useCuffPlayer\", \"cuffs\") -- or \"zipties\"\nTriggerEvent(\"sky_policejob:client:useUncuffPlayer\")\n",[36,253,254,280],{"__ignoreMap":153},[157,255,256,258,260,262,264,266,268,270,273,275,277],{"class":159,"line":160},[157,257,164],{"class":163},[157,259,168],{"class":167},[157,261,172],{"class":171},[157,263,90],{"class":175},[157,265,172],{"class":171},[157,267,200],{"class":167},[157,269,172],{"class":171},[157,271,272],{"class":175},"cuffs",[157,274,172],{"class":171},[157,276,180],{"class":167},[157,278,279],{"class":183},"-- or \"zipties\"\n",[157,281,282,284,286,288,290,292],{"class":159,"line":187},[157,283,164],{"class":163},[157,285,168],{"class":167},[157,287,172],{"class":171},[157,289,100],{"class":175},[157,291,172],{"class":171},[157,293,210],{"class":167},[138,295,297],{"id":296},"sky_policejobclientescorttoggle",[36,298,110],{},[10,300,301],{},"Starts or stops escorting the nearest player.",[147,303,305],{"className":149,"code":304,"filename":151,"language":152,"meta":153,"style":153},"TriggerEvent(\"sky_policejob:client:escortToggle\")\n",[36,306,307],{"__ignoreMap":153},[157,308,309,311,313,315,317,319],{"class":159,"line":160},[157,310,164],{"class":163},[157,312,168],{"class":167},[157,314,172],{"class":171},[157,316,110],{"class":175},[157,318,172],{"class":171},[157,320,210],{"class":167},[138,322,324],{"id":323},"sky_policejobclientescortputinvehicle",[36,325,120],{},[10,327,328],{},"Puts the currently escorted player into the closest vehicle.",[147,330,332],{"className":149,"code":331,"filename":151,"language":152,"meta":153,"style":153},"TriggerEvent(\"sky_policejob:client:escortPutInVehicle\")\n",[36,333,334],{"__ignoreMap":153},[157,335,336,338,340,342,344,346],{"class":159,"line":160},[157,337,164],{"class":163},[157,339,168],{"class":167},[157,341,172],{"class":171},[157,343,120],{"class":175},[157,345,172],{"class":171},[157,347,210],{"class":167},[138,349,351],{"id":350},"sky_policejobclientescorttakeoutvehicle",[36,352,130],{},[10,354,355],{},"Takes the escorted player out of a vehicle.",[147,357,359],{"className":149,"code":358,"filename":151,"language":152,"meta":153,"style":153},"TriggerEvent(\"sky_policejob:client:escortTakeOutVehicle\")\n",[36,360,361],{"__ignoreMap":153},[157,362,363,365,367,369,371,373],{"class":159,"line":160},[157,364,164],{"class":163},[157,366,168],{"class":167},[157,368,172],{"class":171},[157,370,130],{"class":175},[157,372,172],{"class":171},[157,374,210],{"class":167},[14,376,378],{"id":377},"advanced-speed-camera","Advanced Speed Camera",[19,380,382],{"id":381},"server-emitted-camera-state","Server-emitted camera state",[10,384,385],{},"These events keep streamed camera props and optional client integrations synchronized. They are\npresentation signals, not an authority for review or billing.",[45,387,388,400],{},[48,389,390],{},[51,391,392,394,397],{},[54,393,56],{},[54,395,396],{},"Payload",[54,398,399],{},"Purpose",[61,401,402,416,430,445],{},[51,403,404,409,413],{},[66,405,406],{},[36,407,408],{},"sky_policejob:speedcam:sync",[66,410,411],{},[36,412,45],{},[66,414,415],{},"Replaces the locally known camera collection with a server snapshot",[51,417,418,423,427],{},[66,419,420],{},[36,421,422],{},"sky_policejob:speedcam:created",[66,424,425],{},[36,426,45],{},[66,428,429],{},"Adds or replaces one deployed camera",[51,431,432,437,442],{},[66,433,434],{},[36,435,436],{},"sky_policejob:speedcam:removed",[66,438,439],{},[36,440,441],{},"number",[66,443,444],{},"Removes one camera by numeric server ID",[51,446,447,452,456],{},[66,448,449],{},[36,450,451],{},"sky_policejob:speedcam:updated",[66,453,454],{},[36,455,45],{},[66,457,458],{},"Updates durability and operational status for one camera",[138,460,462],{"id":461},"listen-for-created-cameras","Listen for created cameras",[147,464,466],{"className":149,"code":465,"filename":151,"language":152,"meta":153,"style":153},"AddEventHandler(\"sky_policejob:speedcam:created\", function(camera)\n    print(\"Speed camera created:\", camera.id, camera.name)\nend)\n",[36,467,468,495,523],{"__ignoreMap":153},[157,469,470,473,475,477,479,481,483,487,489,493],{"class":159,"line":160},[157,471,472],{"class":163},"AddEventHandler",[157,474,168],{"class":167},[157,476,172],{"class":171},[157,478,422],{"class":175},[157,480,172],{"class":171},[157,482,200],{"class":167},[157,484,486],{"class":485},"s7zQu","function",[157,488,168],{"class":171},[157,490,492],{"class":491},"sHdIc","camera",[157,494,210],{"class":171},[157,496,497,500,502,504,507,509,512,516,518,521],{"class":159,"line":187},[157,498,499],{"class":163},"    print",[157,501,168],{"class":167},[157,503,172],{"class":171},[157,505,506],{"class":175},"Speed camera created:",[157,508,172],{"class":171},[157,510,511],{"class":167},", camera.",[157,513,515],{"class":514},"sBMFI","id",[157,517,511],{"class":167},[157,519,520],{"class":514},"name",[157,522,210],{"class":167},[157,524,526,529],{"class":159,"line":525},3,[157,527,528],{"class":485},"end",[157,530,210],{"class":167},[138,532,534],{"id":533},"listen-for-removal","Listen for removal",[147,536,538],{"className":149,"code":537,"filename":151,"language":152,"meta":153,"style":153},"AddEventHandler(\"sky_policejob:speedcam:removed\", function(cameraId)\n    print(\"Speed camera removed:\", cameraId)\nend)\n",[36,539,540,563,579],{"__ignoreMap":153},[157,541,542,544,546,548,550,552,554,556,558,561],{"class":159,"line":160},[157,543,472],{"class":163},[157,545,168],{"class":167},[157,547,172],{"class":171},[157,549,436],{"class":175},[157,551,172],{"class":171},[157,553,200],{"class":167},[157,555,486],{"class":485},[157,557,168],{"class":171},[157,559,560],{"class":491},"cameraId",[157,562,210],{"class":171},[157,564,565,567,569,571,574,576],{"class":159,"line":187},[157,566,499],{"class":163},[157,568,168],{"class":167},[157,570,172],{"class":171},[157,572,573],{"class":175},"Speed camera removed:",[157,575,172],{"class":171},[157,577,578],{"class":167},", cameraId)\n",[157,580,581,583],{"class":159,"line":525},[157,582,528],{"class":485},[157,584,210],{"class":167},[138,586,588],{"id":587},"listen-for-durability-changes","Listen for durability changes",[147,590,592],{"className":149,"code":591,"filename":151,"language":152,"meta":153,"style":153},"AddEventHandler(\"sky_policejob:speedcam:updated\", function(change)\n    print(\"Speed camera status:\", change.id, change.status, change.durability)\nend)\n",[36,593,594,617,647],{"__ignoreMap":153},[157,595,596,598,600,602,604,606,608,610,612,615],{"class":159,"line":160},[157,597,472],{"class":163},[157,599,168],{"class":167},[157,601,172],{"class":171},[157,603,451],{"class":175},[157,605,172],{"class":171},[157,607,200],{"class":167},[157,609,486],{"class":485},[157,611,168],{"class":171},[157,613,614],{"class":491},"change",[157,616,210],{"class":171},[157,618,619,621,623,625,628,630,633,635,637,640,642,645],{"class":159,"line":187},[157,620,499],{"class":163},[157,622,168],{"class":167},[157,624,172],{"class":171},[157,626,627],{"class":175},"Speed camera status:",[157,629,172],{"class":171},[157,631,632],{"class":167},", change.",[157,634,515],{"class":514},[157,636,632],{"class":167},[157,638,639],{"class":514},"status",[157,641,632],{"class":167},[157,643,644],{"class":514},"durability",[157,646,210],{"class":167},[157,648,649,651],{"class":159,"line":525},[157,650,528],{"class":485},[157,652,210],{"class":167},[19,654,656],{"id":655},"events-that-are-not-public-apis","Events that are not public APIs",[10,658,659],{},"Photo capture, evidence-token attachment, review listing, approval, and discard callbacks are\ninternal. They are deliberately excluded from this reference because integrations must not imitate\nthe built-in client-to-server workflow.",[661,662,665],"callout",{"color":663,"icon":664},"success","i-lucide-shield-check",[10,666,667],{},"An exploiter can locally trigger a registered client event and fake presentation state on their own\nclient. These documented events never update the camera database, review status, offence, owner, or\ninvoice. All persistent decisions remain server-authoritative.",[14,669,671],{"id":670},"support","Support",[10,673,674],{},"Need help? Our support team is always ready to assist.",[676,677],"u-button",{"color":678,"icon":679,"label":680,"target":681,"to":682,"variant":683},"neutral","i-simple-icons-discord","Join Discord","_blank","https://discord.gg/sky-systems","subtle",[685,686,687],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--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);}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 pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":153,"searchDepth":160,"depth":187,"links":689},[690,693,697],{"id":16,"depth":187,"text":17,"children":691},[692],{"id":21,"depth":525,"text":22},{"id":377,"depth":187,"text":378,"children":694},[695,696],{"id":381,"depth":525,"text":382},{"id":655,"depth":525,"text":656},{"id":670,"depth":187,"text":671},"Supported Police Job client events and read-only Advanced Speed Camera state events.","md",null,{},{"icon":703},"i-lucide-radio-tower","/docs/jobs/policejob/reference/events",{"title":5,"description":698},{"loc":704},"1.docs/0.jobs/1.policejob/4.reference/4.events","3FMbgBaCA0lL9cH4NhTaGto5ce_2SXZ0atDL8HrR7-8",[710,716],{"title":711,"path":712,"stem":713,"description":714,"icon":715,"children":-1},"Exports","/docs/jobs/policejob/reference/exports","1.docs/0.jobs/1.policejob/4.reference/3.exports","Client and server exports provided by the Sky Police Job resource, including the safe Advanced Speed Camera boundary.","i-lucide-server-cog",{"title":717,"path":718,"stem":719,"description":720,"children":-1},"FAQ","/docs/jobs/policejob/reference/faq","1.docs/0.jobs/1.policejob/4.reference/5.faq","Frequently asked questions about the Sky Police Job resource.",[],1786395269505]