[{"data":1,"prerenderedAt":806},["ShallowReactive",2],{"/docs/base/jobs-base/server-exports/players-members":3,"/docs/base/jobs-base/server-exports/players-members-surround":794,"/docs/base/jobs-base/server-exports/players-members-implemented-suggestions":805},{"id":4,"title":5,"body":6,"description":785,"extension":786,"head":787,"implementedSuggestions":787,"meta":788,"navigation":134,"path":789,"schemaOrg":787,"seo":790,"sitemap":791,"stem":792,"__hash__":793},"docs/1.docs/base/2.jobs-base/4.server-exports/14.players-members.md","Players & Members",{"type":7,"value":8,"toc":777},"minimark",[9,17,21,24,32,82,208,214,282,383,389,439,483,489,518,523,685,770,773],[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},"players-members",[10,22,23],{},"These exports let external resources (admin menus, whitelist systems, other job scripts) manage job members without going through the boss menu.",[25,26,28],"h3",{"id":27},"getplayerjobinfoplayerid",[29,30,31],"code",{},"getPlayerJobInfo(playerId)",[33,34,35,43,64],"ul",{},[36,37,38,42],"li",{},[39,40,41],"strong",{},"Purpose",": Returns the cached job state of an online player in one call.",[36,44,45,48,49],{},[39,46,47],{},"Arguments",":\n",[33,50,51],{},[36,52,53,56,57,60,61],{},[29,54,55],{},"playerId"," (",[29,58,59],{},"number",") — the server ID of the player. ",[39,62,63],{},"Required.",[36,65,66,69,70,73,74,77,78,81],{},[39,67,68],{},"Returns",": ",[29,71,72],{},"table | nil"," — ",[29,75,76],{},"{ job, grade, gradeLabel, onDuty }",", or ",[29,79,80],{},"nil"," if the player is not loaded.",[83,84,89],"pre",{"className":85,"code":86,"language":87,"meta":88,"style":88},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","local info = exports[\"sky_jobs_base\"]:getPlayerJobInfo(playerId)\n\nif info then\n    print((\"%s — grade %d (%s), on duty: %s\"):format(info.job, info.grade, info.gradeLabel, tostring(info.onDuty)))\nend\n","lua","",[29,90,91,129,136,148,202],{"__ignoreMap":88},[92,93,96,100,104,107,110,113,117,119,122,126],"span",{"class":94,"line":95},"line",1,[92,97,99],{"class":98},"sMK4o","local",[92,101,103],{"class":102},"sTEyZ"," info ",[92,105,106],{"class":98},"=",[92,108,109],{"class":102}," exports[",[92,111,112],{"class":98},"\"",[92,114,116],{"class":115},"sfazB","sky_jobs_base",[92,118,112],{"class":98},[92,120,121],{"class":102},"]:",[92,123,125],{"class":124},"s2Zo4","getPlayerJobInfo",[92,127,128],{"class":102},"(playerId)\n",[92,130,132],{"class":94,"line":131},2,[92,133,135],{"emptyLinePlaceholder":134},true,"\n",[92,137,139,143,145],{"class":94,"line":138},3,[92,140,142],{"class":141},"s7zQu","if",[92,144,103],{"class":102},[92,146,147],{"class":141},"then\n",[92,149,151,154,157,159,162,164,167,170,173,177,180,183,185,188,191,194,196,199],{"class":94,"line":150},4,[92,152,153],{"class":124},"    print",[92,155,156],{"class":102},"((",[92,158,112],{"class":98},[92,160,161],{"class":115},"%s — grade %d (%s), on duty: %s",[92,163,112],{"class":98},[92,165,166],{"class":102},"):",[92,168,169],{"class":124},"format",[92,171,172],{"class":102},"(info.",[92,174,176],{"class":175},"sBMFI","job",[92,178,179],{"class":102},", info.",[92,181,182],{"class":175},"grade",[92,184,179],{"class":102},[92,186,187],{"class":175},"gradeLabel",[92,189,190],{"class":102},", ",[92,192,193],{"class":124},"tostring",[92,195,172],{"class":102},[92,197,198],{"class":175},"onDuty",[92,200,201],{"class":102},")))\n",[92,203,205],{"class":94,"line":204},5,[92,206,207],{"class":141},"end\n",[25,209,211],{"id":210},"setjobmemberjobname-playeroridentifier-grade",[29,212,213],{},"setJobMember(jobName, playerOrIdentifier, grade)",[33,215,216,221,257],{},[36,217,218,220],{},[39,219,41],{},": Hires a player into a job or changes the grade of an existing member. Works for online players (server ID) and offline players (identifier). Updates the framework job, the player cache, and notifies open boss menus.",[36,222,223,48,225],{},[39,224,47],{},[33,226,227,238,249],{},[36,228,229,56,232,235,236],{},[29,230,231],{},"jobName",[29,233,234],{},"string",") — the job name. ",[39,237,63],{},[36,239,240,56,243,246,247],{},[29,241,242],{},"playerOrIdentifier",[29,244,245],{},"number | string",") — server ID or framework identifier. ",[39,248,63],{},[36,250,251,56,253,256],{},[29,252,182],{},[29,254,255],{},"number?",") — target grade. Defaults to the job's lowest grade (hire).",[36,258,259,48,261],{},[39,260,68],{},[33,262,263,272],{},[36,264,265,73,268,271],{},[29,266,267],{},"boolean",[29,269,270],{},"true"," on success.",[36,273,274,277,278,281],{},[29,275,276],{},"string?"," — error message on failure (e.g. ",[29,279,280],{},"\"Invalid grade\"",").",[83,283,285],{"className":85,"code":284,"language":87,"meta":88,"style":88},"-- Hire an online player at the default grade\nlocal ok, err = exports[\"sky_jobs_base\"]:setJobMember(\"ambulance\", playerId)\n\n-- Promote an offline player to grade 2\nlocal ok, err = exports[\"sky_jobs_base\"]:setJobMember(\"ambulance\", \"license:abc123\", 2)\n",[29,286,287,293,328,332,337],{"__ignoreMap":88},[92,288,289],{"class":94,"line":95},[92,290,292],{"class":291},"sHwdD","-- Hire an online player at the default grade\n",[92,294,295,297,300,302,304,306,308,310,312,315,318,320,323,325],{"class":94,"line":131},[92,296,99],{"class":98},[92,298,299],{"class":102}," ok, err ",[92,301,106],{"class":98},[92,303,109],{"class":102},[92,305,112],{"class":98},[92,307,116],{"class":115},[92,309,112],{"class":98},[92,311,121],{"class":102},[92,313,314],{"class":124},"setJobMember",[92,316,317],{"class":102},"(",[92,319,112],{"class":98},[92,321,322],{"class":115},"ambulance",[92,324,112],{"class":98},[92,326,327],{"class":102},", playerId)\n",[92,329,330],{"class":94,"line":138},[92,331,135],{"emptyLinePlaceholder":134},[92,333,334],{"class":94,"line":150},[92,335,336],{"class":291},"-- Promote an offline player to grade 2\n",[92,338,339,341,343,345,347,349,351,353,355,357,359,361,363,365,367,369,372,374,376,380],{"class":94,"line":204},[92,340,99],{"class":98},[92,342,299],{"class":102},[92,344,106],{"class":98},[92,346,109],{"class":102},[92,348,112],{"class":98},[92,350,116],{"class":115},[92,352,112],{"class":98},[92,354,121],{"class":102},[92,356,314],{"class":124},[92,358,317],{"class":102},[92,360,112],{"class":98},[92,362,322],{"class":115},[92,364,112],{"class":98},[92,366,190],{"class":102},[92,368,112],{"class":98},[92,370,371],{"class":115},"license:abc123",[92,373,112],{"class":98},[92,375,190],{"class":102},[92,377,379],{"class":378},"sbssI","2",[92,381,382],{"class":102},")\n",[25,384,386],{"id":385},"removejobmemberjobname-playeroridentifier",[29,387,388],{},"removeJobMember(jobName, playerOrIdentifier)",[33,390,391,400,422],{},[36,392,393,395,396,399],{},[39,394,41],{},": Fires a member from a job. Sets the player to ",[29,397,398],{},"unemployed",", ends their duty, and removes their member stats. Works for online and offline players.",[36,401,402,48,404],{},[39,403,47],{},[33,405,406,414],{},[36,407,408,56,410,235,412],{},[29,409,231],{},[29,411,234],{},[39,413,63],{},[36,415,416,56,418,246,420],{},[29,417,242],{},[29,419,245],{},[39,421,63],{},[36,423,424,48,426],{},[39,425,68],{},[33,427,428,434],{},[36,429,430,73,432,271],{},[29,431,267],{},[29,433,270],{},[36,435,436,438],{},[29,437,276],{}," — error message on failure.",[83,440,442],{"className":85,"code":441,"language":87,"meta":88,"style":88},"local ok, err = exports[\"sky_jobs_base\"]:removeJobMember(\"ambulance\", \"license:abc123\")\n",[29,443,444],{"__ignoreMap":88},[92,445,446,448,450,452,454,456,458,460,462,465,467,469,471,473,475,477,479,481],{"class":94,"line":95},[92,447,99],{"class":98},[92,449,299],{"class":102},[92,451,106],{"class":98},[92,453,109],{"class":102},[92,455,112],{"class":98},[92,457,116],{"class":115},[92,459,112],{"class":98},[92,461,121],{"class":102},[92,463,464],{"class":124},"removeJobMember",[92,466,317],{"class":102},[92,468,112],{"class":98},[92,470,322],{"class":115},[92,472,112],{"class":98},[92,474,190],{"class":102},[92,476,112],{"class":98},[92,478,371],{"class":115},[92,480,112],{"class":98},[92,482,382],{"class":102},[25,484,486],{"id":485},"getjobmembersjobname",[29,487,488],{},"getJobMembers(jobName)",[33,490,491,496,510],{},[36,492,493,495],{},[39,494,41],{},": Returns all members of a job (online and offline) with their boss-menu stats.",[36,497,498,48,500],{},[39,499,47],{},[33,501,502],{},[36,503,504,56,506,235,508],{},[29,505,231],{},[29,507,234],{},[39,509,63],{},[36,511,512,69,514,517],{},[39,513,68],{},[29,515,516],{},"table[]"," — array of member entries.",[519,520,522],"h4",{"id":521},"member-entry-structure","Member Entry Structure",[524,525,526,542],"table",{},[527,528,529],"thead",{},[530,531,532,536,539],"tr",{},[533,534,535],"th",{},"Field",[533,537,538],{},"Type",[533,540,541],{},"Description",[543,544,545,560,574,588,601,615,629,643,657,671],"tbody",{},[530,546,547,553,557],{},[548,549,550],"td",{},[29,551,552],{},"identifier",[548,554,555],{},[29,556,234],{},[548,558,559],{},"Framework identifier",[530,561,562,567,571],{},[548,563,564],{},[29,565,566],{},"license",[548,568,569],{},[29,570,234],{},[548,572,573],{},"Stored license identifier",[530,575,576,581,585],{},[548,577,578],{},[29,579,580],{},"name",[548,582,583],{},[29,584,234],{},[548,586,587],{},"Character name",[530,589,590,594,598],{},[548,591,592],{},[29,593,182],{},[548,595,596],{},[29,597,59],{},[548,599,600],{},"Job grade",[530,602,603,608,612],{},[548,604,605],{},[29,606,607],{},"grade_label",[548,609,610],{},[29,611,234],{},[548,613,614],{},"Grade label",[530,616,617,622,626],{},[548,618,619],{},[29,620,621],{},"onduty",[548,623,624],{},[29,625,267],{},[548,627,628],{},"Current duty state",[530,630,631,636,640],{},[548,632,633],{},[29,634,635],{},"last_online_timestamp",[548,637,638],{},[29,639,59],{},[548,641,642],{},"Unix timestamp of last online",[530,644,645,650,654],{},[548,646,647],{},[29,648,649],{},"total_work_time_seconds",[548,651,652],{},[29,653,59],{},[548,655,656],{},"Accumulated on-duty time",[530,658,659,664,668],{},[548,660,661],{},[29,662,663],{},"actions_done",[548,665,666],{},[29,667,59],{},[548,669,670],{},"Job action counter",[530,672,673,678,682],{},[548,674,675],{},[29,676,677],{},"image_url",[548,679,680],{},[29,681,276],{},[548,683,684],{},"Member image if set",[83,686,688],{"className":85,"code":687,"language":87,"meta":88,"style":88},"local members = exports[\"sky_jobs_base\"]:getJobMembers(\"ambulance\")\n\nfor _, member in ipairs(members) do\n    print(member.name, member.grade_label, member.onduty)\nend\n",[29,689,690,722,726,746,766],{"__ignoreMap":88},[92,691,692,694,697,699,701,703,705,707,709,712,714,716,718,720],{"class":94,"line":95},[92,693,99],{"class":98},[92,695,696],{"class":102}," members ",[92,698,106],{"class":98},[92,700,109],{"class":102},[92,702,112],{"class":98},[92,704,116],{"class":115},[92,706,112],{"class":98},[92,708,121],{"class":102},[92,710,711],{"class":124},"getJobMembers",[92,713,317],{"class":102},[92,715,112],{"class":98},[92,717,322],{"class":115},[92,719,112],{"class":98},[92,721,382],{"class":102},[92,723,724],{"class":94,"line":131},[92,725,135],{"emptyLinePlaceholder":134},[92,727,728,731,734,737,740,743],{"class":94,"line":138},[92,729,730],{"class":141},"for",[92,732,733],{"class":102}," _, member ",[92,735,736],{"class":141},"in",[92,738,739],{"class":124}," ipairs",[92,741,742],{"class":102},"(members) ",[92,744,745],{"class":141},"do\n",[92,747,748,750,753,755,758,760,762,764],{"class":94,"line":150},[92,749,153],{"class":124},[92,751,752],{"class":102},"(member.",[92,754,580],{"class":175},[92,756,757],{"class":102},", member.",[92,759,607],{"class":175},[92,761,757],{"class":102},[92,763,621],{"class":175},[92,765,382],{"class":102},[92,767,768],{"class":94,"line":204},[92,769,207],{"class":141},[771,772],"br",{},[774,775,776],"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 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);}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 pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":88,"searchDepth":95,"depth":131,"links":778},[779],{"id":20,"depth":131,"text":5,"children":780},[781,782,783,784],{"id":27,"depth":138,"text":31},{"id":210,"depth":138,"text":213},{"id":385,"depth":138,"text":388},{"id":485,"depth":138,"text":488},"Reference for Players & Members in sky_jobs_base.","md",null,{},"/docs/base/jobs-base/server-exports/players-members",{"title":5,"description":785},{"loc":789},"1.docs/base/2.jobs-base/4.server-exports/14.players-members","IdDzp1-2uAZsPS27pZCNnAkLEcBCupkSxri87f1lQkY",[795,800],{"title":796,"path":797,"stem":798,"description":799,"children":-1},"Duty","/docs/base/jobs-base/server-exports/duty","1.docs/base/2.jobs-base/4.server-exports/13.duty","Reference for Duty in sky_jobs_base.",{"title":801,"path":802,"stem":803,"description":804,"children":-1},"Society Money","/docs/base/jobs-base/server-exports/society-money","1.docs/base/2.jobs-base/4.server-exports/15.society-money","Reference for Society Money in sky_jobs_base.",[],1791814183566]