[{"data":1,"prerenderedAt":779},["ShallowReactive",2],{"/docs/jobs/mechanicjob/reference/events":3,"/docs/jobs/mechanicjob/reference/events-surround":767,"/docs/jobs/mechanicjob/reference/events-implemented-suggestions":778},{"id":4,"title":5,"body":6,"description":757,"extension":758,"head":759,"implementedSuggestions":759,"meta":760,"navigation":761,"path":762,"schemaOrg":759,"seo":763,"sitemap":764,"stem":765,"__hash__":766},"docs/1.docs/0.jobs/2.mechanicjob/4.reference/4.events.md","Events",{"type":7,"value":8,"toc":749},"minimark",[9,18,25,84,175,181,252,329,335,384,444,450,530,601,607,663,729,733,736,745],[10,11,12,13,17],"p",{},"These events notify other server resources about completed mechanic actions. Listen with ",[14,15,16],"code",{},"AddEventHandler",". They are intentionally not registered as network events and cannot be triggered by clients.",[19,20,22],"h2",{"id":21},"sky_mechanicjobservervehiclerepaired",[14,23,24],{},"sky_mechanicjob:server:vehicleRepaired",[26,27,28,40],"ul",{},[29,30,31,35,36,39],"li",{},[32,33,34],"strong",{},"Purpose",": Emitted after ",[14,37,38],{},"RepairVehicle"," accepted a full vehicle repair.",[29,41,42,45,46],{},[32,43,44],{},"Payload",":\n",[26,47,48,58,67,75],{},[29,49,50,53,54,57],{},[14,51,52],{},"netId"," (",[14,55,56],{},"number",") - vehicle network ID.",[29,59,60,53,63,66],{},[14,61,62],{},"plate",[14,64,65],{},"string",") - vehicle plate.",[29,68,69,53,72,74],{},[14,70,71],{},"reason",[14,73,65],{},") - supplied repair reason.",[29,76,77,53,80,83],{},[14,78,79],{},"wear",[14,81,82],{},"table",") - repaired diagnostic wear values.",[85,86,92],"pre",{"className":87,"code":88,"filename":89,"language":90,"meta":91,"style":91},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","AddEventHandler(\"sky_mechanicjob:server:vehicleRepaired\", function(data)\n    print((\"Vehicle %s repaired: %s\"):format(data.plate, data.reason))\nend)\n","server.lua","lua","",[14,93,94,131,167],{"__ignoreMap":91},[95,96,99,102,106,110,113,115,118,122,124,128],"span",{"class":97,"line":98},"line",1,[95,100,16],{"class":101},"s2Zo4",[95,103,105],{"class":104},"sTEyZ","(",[95,107,109],{"class":108},"sMK4o","\"",[95,111,24],{"class":112},"sfazB",[95,114,109],{"class":108},[95,116,117],{"class":104},", ",[95,119,121],{"class":120},"s7zQu","function",[95,123,105],{"class":108},[95,125,127],{"class":126},"sHdIc","data",[95,129,130],{"class":108},")\n",[95,132,134,137,140,142,145,147,150,153,156,159,162,164],{"class":97,"line":133},2,[95,135,136],{"class":101},"    print",[95,138,139],{"class":104},"((",[95,141,109],{"class":108},[95,143,144],{"class":112},"Vehicle %s repaired: %s",[95,146,109],{"class":108},[95,148,149],{"class":104},"):",[95,151,152],{"class":101},"format",[95,154,155],{"class":104},"(data.",[95,157,62],{"class":158},"sBMFI",[95,160,161],{"class":104},", data.",[95,163,71],{"class":158},[95,165,166],{"class":104},"))\n",[95,168,170,173],{"class":97,"line":169},3,[95,171,172],{"class":120},"end",[95,174,130],{"class":104},[19,176,178],{"id":177},"sky_mechanicjobservervehiclewearchanged",[14,179,180],{},"sky_mechanicjob:server:vehicleWearChanged",[26,182,183,188],{},[29,184,185,187],{},[32,186,34],{},": Emitted when diagnostic wear is repaired or wear and mileage are saved.",[29,189,190,45,192],{},[32,191,44],{},[26,193,194,200,207,216,224,233,240],{},[29,195,196,53,198,66],{},[14,197,62],{},[14,199,65],{},[29,201,202,53,204,206],{},[14,203,79],{},[14,205,82],{},") - current diagnostic wear values.",[29,208,209,53,212,215],{},[14,210,211],{},"mileage",[14,213,214],{},"number?",") - current mileage when emitted by a mileage update.",[29,217,218,53,221,223],{},[14,219,220],{},"repairedParts",[14,222,82],{},") - repaired wear part IDs.",[29,225,226,53,229,232],{},[14,227,228],{},"fullRepair",[14,230,231],{},"boolean",") - whether every wear part was repaired.",[29,234,235,53,237,239],{},[14,236,71],{},[14,238,65],{},") - change reason.",[29,241,242,53,245,247,248,251],{},[14,243,244],{},"source",[14,246,56],{},") - initiating player server ID, or ",[14,249,250],{},"0"," for a server export.",[85,253,255],{"className":87,"code":254,"filename":89,"language":90,"meta":91,"style":91},"AddEventHandler(\"sky_mechanicjob:server:vehicleWearChanged\", function(data)\n    if data.fullRepair then\n        print((\"All wear repaired for %s\"):format(data.plate))\n    end\nend)\n",[14,256,257,279,292,316,322],{"__ignoreMap":91},[95,258,259,261,263,265,267,269,271,273,275,277],{"class":97,"line":98},[95,260,16],{"class":101},[95,262,105],{"class":104},[95,264,109],{"class":108},[95,266,180],{"class":112},[95,268,109],{"class":108},[95,270,117],{"class":104},[95,272,121],{"class":120},[95,274,105],{"class":108},[95,276,127],{"class":126},[95,278,130],{"class":108},[95,280,281,284,287,289],{"class":97,"line":133},[95,282,283],{"class":120},"    if",[95,285,286],{"class":104}," data.",[95,288,228],{"class":158},[95,290,291],{"class":120}," then\n",[95,293,294,297,299,301,304,306,308,310,312,314],{"class":97,"line":169},[95,295,296],{"class":101},"        print",[95,298,139],{"class":104},[95,300,109],{"class":108},[95,302,303],{"class":112},"All wear repaired for %s",[95,305,109],{"class":108},[95,307,149],{"class":104},[95,309,152],{"class":101},[95,311,155],{"class":104},[95,313,62],{"class":158},[95,315,166],{"class":104},[95,317,319],{"class":97,"line":318},4,[95,320,321],{"class":120},"    end\n",[95,323,325,327],{"class":97,"line":324},5,[95,326,172],{"class":120},[95,328,130],{"class":104},[19,330,332],{"id":331},"sky_mechanicjobservertuningchanged",[14,333,334],{},"sky_mechanicjob:server:tuningChanged",[26,336,337,342],{},[29,338,339,341],{},[32,340,34],{},": Emitted after saved tuning properties or Stance changed.",[29,343,344,45,346],{},[32,345,44],{},[26,347,348,354,362,377],{},[29,349,350,53,352,66],{},[14,351,62],{},[14,353,65],{},[29,355,356,53,359,361],{},[14,357,358],{},"properties",[14,360,82],{},") - current saved vehicle properties.",[29,363,364,53,367,369,370,372,373,376],{},[14,365,366],{},"change",[14,368,65],{},") - ",[14,371,358],{}," or ",[14,374,375],{},"stance",".",[29,378,379,53,381,383],{},[14,380,244],{},[14,382,56],{},") - initiating player server ID.",[85,385,387],{"className":87,"code":386,"filename":89,"language":90,"meta":91,"style":91},"AddEventHandler(\"sky_mechanicjob:server:tuningChanged\", function(data)\n    print((\"%s tuning changed: %s\"):format(data.plate, data.change))\nend)\n",[14,388,389,411,438],{"__ignoreMap":91},[95,390,391,393,395,397,399,401,403,405,407,409],{"class":97,"line":98},[95,392,16],{"class":101},[95,394,105],{"class":104},[95,396,109],{"class":108},[95,398,334],{"class":112},[95,400,109],{"class":108},[95,402,117],{"class":104},[95,404,121],{"class":120},[95,406,105],{"class":108},[95,408,127],{"class":126},[95,410,130],{"class":108},[95,412,413,415,417,419,422,424,426,428,430,432,434,436],{"class":97,"line":133},[95,414,136],{"class":101},[95,416,139],{"class":104},[95,418,109],{"class":108},[95,420,421],{"class":112},"%s tuning changed: %s",[95,423,109],{"class":108},[95,425,149],{"class":104},[95,427,152],{"class":101},[95,429,155],{"class":104},[95,431,62],{"class":158},[95,433,161],{"class":104},[95,435,366],{"class":158},[95,437,166],{"class":104},[95,439,440,442],{"class":97,"line":169},[95,441,172],{"class":120},[95,443,130],{"class":104},[19,445,447],{"id":446},"sky_mechanicjobserverordercompleted",[14,448,449],{},"sky_mechanicjob:server:orderCompleted",[26,451,452,457],{},[29,453,454,456],{},[32,455,34],{},": Emitted after the final open part of a tuning order was installed.",[29,458,459,45,461],{},[32,460,44],{},[26,462,463,470,478,487,495,503,509,519],{},[29,464,465,53,467,469],{},[14,466,244],{},[14,468,56],{},") - installing player server ID.",[29,471,472,53,475,477],{},[14,473,474],{},"orderId",[14,476,56],{},") - numeric order ID.",[29,479,480,53,483,486],{},[14,481,482],{},"orderUid",[14,484,485],{},"string?",") - public order identifier.",[29,488,489,53,492,494],{},[14,490,491],{},"partIndex",[14,493,56],{},") - index of the final installed part.",[29,496,497,53,500,502],{},[14,498,499],{},"part",[14,501,82],{},") - final installed part data.",[29,504,505,53,507,66],{},[14,506,62],{},[14,508,485],{},[29,510,511,53,514,369,516,376],{},[14,512,513],{},"status",[14,515,65],{},[14,517,518],{},"completed",[29,520,521,53,523,525,526,529],{},[14,522,518],{},[14,524,231],{},") - always ",[14,527,528],{},"true"," for this event.",[85,531,533],{"className":87,"code":532,"filename":89,"language":90,"meta":91,"style":91},"AddEventHandler(\"sky_mechanicjob:server:orderCompleted\", function(data)\n    print((\"Order %s completed for %s\"):format(data.orderId, data.plate or \"UNKNOWN\"))\nend)\n",[14,534,535,557,595],{"__ignoreMap":91},[95,536,537,539,541,543,545,547,549,551,553,555],{"class":97,"line":98},[95,538,16],{"class":101},[95,540,105],{"class":104},[95,542,109],{"class":108},[95,544,449],{"class":112},[95,546,109],{"class":108},[95,548,117],{"class":104},[95,550,121],{"class":120},[95,552,105],{"class":108},[95,554,127],{"class":126},[95,556,130],{"class":108},[95,558,559,561,563,565,568,570,572,574,576,578,580,582,585,588,591,593],{"class":97,"line":133},[95,560,136],{"class":101},[95,562,139],{"class":104},[95,564,109],{"class":108},[95,566,567],{"class":112},"Order %s completed for %s",[95,569,109],{"class":108},[95,571,149],{"class":104},[95,573,152],{"class":101},[95,575,155],{"class":104},[95,577,474],{"class":158},[95,579,161],{"class":104},[95,581,62],{"class":158},[95,583,584],{"class":108}," or",[95,586,587],{"class":108}," \"",[95,589,590],{"class":112},"UNKNOWN",[95,592,109],{"class":108},[95,594,166],{"class":104},[95,596,597,599],{"class":97,"line":169},[95,598,172],{"class":120},[95,600,130],{"class":104},[19,602,604],{"id":603},"sky_mechanicjobserverfakeplatechanged",[14,605,606],{},"sky_mechanicjob:server:fakePlateChanged",[26,608,609,614],{},[29,610,611,613],{},[32,612,34],{},": Emitted when a fake plate is applied, restored, or removed.",[29,615,616,45,618],{},[32,617,44],{},[26,619,620,626,634,642,650,656],{},[29,621,622,53,624,57],{},[14,623,52],{},[14,625,56],{},[29,627,628,53,631,633],{},[14,629,630],{},"active",[14,632,231],{},") - whether the fake plate is active.",[29,635,636,53,639,641],{},[14,637,638],{},"realPlate",[14,640,65],{},") - persistent real plate.",[29,643,644,53,647,649],{},[14,645,646],{},"displayPlate",[14,648,485],{},") - fake display plate.",[29,651,652,53,654,239],{},[14,653,71],{},[14,655,65],{},[29,657,658,53,661,383],{},[14,659,660],{},"actorSource",[14,662,214],{},[85,664,666],{"className":87,"code":665,"filename":89,"language":90,"meta":91,"style":91},"AddEventHandler(\"sky_mechanicjob:server:fakePlateChanged\", function(data)\n    print((\"Fake plate state for %s: %s\"):format(data.realPlate, tostring(data.active)))\nend)\n",[14,667,668,690,723],{"__ignoreMap":91},[95,669,670,672,674,676,678,680,682,684,686,688],{"class":97,"line":98},[95,671,16],{"class":101},[95,673,105],{"class":104},[95,675,109],{"class":108},[95,677,606],{"class":112},[95,679,109],{"class":108},[95,681,117],{"class":104},[95,683,121],{"class":120},[95,685,105],{"class":108},[95,687,127],{"class":126},[95,689,130],{"class":108},[95,691,692,694,696,698,701,703,705,707,709,711,713,716,718,720],{"class":97,"line":133},[95,693,136],{"class":101},[95,695,139],{"class":104},[95,697,109],{"class":108},[95,699,700],{"class":112},"Fake plate state for %s: %s",[95,702,109],{"class":108},[95,704,149],{"class":104},[95,706,152],{"class":101},[95,708,155],{"class":104},[95,710,638],{"class":158},[95,712,117],{"class":104},[95,714,715],{"class":101},"tostring",[95,717,155],{"class":104},[95,719,630],{"class":158},[95,721,722],{"class":104},")))\n",[95,724,725,727],{"class":97,"line":169},[95,726,172],{"class":120},[95,728,130],{"class":104},[19,730,732],{"id":731},"support","Support",[10,734,735],{},"Need help? Our support team is always ready to assist",[737,738],"u-button",{"color":739,"icon":740,"label":741,"target":742,"to":743,"variant":744},"neutral","i-simple-icons-discord","Join Discord","_blank","https://discord.gg/sky-systems","subtle",[746,747,748],"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 .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}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":91,"searchDepth":98,"depth":133,"links":750},[751,752,753,754,755,756],{"id":21,"depth":133,"text":24},{"id":177,"depth":133,"text":180},{"id":331,"depth":133,"text":334},{"id":446,"depth":133,"text":449},{"id":603,"depth":133,"text":606},{"id":731,"depth":133,"text":732},"Local server events emitted by the Sky Mechanic Job resource.","md",null,{},true,"/docs/jobs/mechanicjob/reference/events",{"title":5,"description":757},{"loc":762},"1.docs/0.jobs/2.mechanicjob/4.reference/4.events","IfH5NDGxxULF13hn35XxdR11obV_h2y1nfnME_JHdGI",[768,773],{"title":769,"path":770,"stem":771,"description":772,"children":-1},"Exports","/docs/jobs/mechanicjob/reference/exports","1.docs/0.jobs/2.mechanicjob/4.reference/3.exports","Client and server exports provided by the Sky Mechanic Job resource.",{"title":774,"path":775,"stem":776,"description":777,"children":-1},"Garage Integration","/docs/jobs/mechanicjob/reference/garage-integration","1.docs/0.jobs/2.mechanicjob/4.reference/5.garage-integration","Connect the central QBCore or ESX vehicle-property functions to Sky and fix tuning persistence in qb-garages.",[],1785795435300]