diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 82acf13dcf..51b907f846 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -40,4 +40,11 @@ #define CHAPLAIN (1<<10) #define CLOWN (1<<11) #define MIME (1<<12) -#define ASSISTANT (1<<13) \ No newline at end of file +#define ASSISTANT (1<<13) + +#define JOB_AVAILABLE 0 +#define JOB_UNAVAILABLE_GENERIC 1 +#define JOB_UNAVAILABLE_BANNED 2 +#define JOB_UNAVAILABLE_PLAYTIME 3 +#define JOB_UNAVAILABLE_ACCOUNTAGE 4 +#define JOB_UNAVAILABLE_SLOTFULL 5 diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 2471593814..8930a02036 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -278,31 +278,47 @@ qdel(src) return TRUE -/mob/dead/new_player/proc/IsJobAvailable(rank) +/proc/get_job_unavailable_error_message(retval, jobtitle) + switch(retval) + if(JOB_AVAILABLE) + return "[jobtitle] is available." + if(JOB_UNAVAILABLE_GENERIC) + return "[jobtitle] is unavailable." + if(JOB_UNAVAILABLE_BANNED) + return "You are currently banned from [jobtitle]." + if(JOB_UNAVAILABLE_PLAYTIME) + return "You do not have enough relevant playtime for [jobtitle]." + if(JOB_UNAVAILABLE_ACCOUNTAGE) + return "Your account is not old enough for [jobtitle]." + if(JOB_UNAVAILABLE_SLOTFULL) + return "[jobtitle] is already filled to capacity." + return "Error: Unknown job availability." + +/mob/dead/new_player/proc/IsJobUnavailable(rank) var/datum/job/job = SSjob.GetJob(rank) if(!job) - return 0 + return JOB_UNAVAILABLE_GENERIC if((job.current_positions >= job.total_positions) && job.total_positions != -1) if(job.title == "Assistant") if(isnum(client.player_age) && client.player_age <= 14) //Newbies can always be assistants - return 1 + return JOB_AVAILABLE for(var/datum/job/J in SSjob.occupations) if(J && J.current_positions < J.total_positions && J.title != job.title) - return 0 + return JOB_UNAVAILABLE_SLOTFULL else - return 0 + return JOB_UNAVAILABLE_SLOTFULL if(jobban_isbanned(src,rank)) - return 0 - if(!job.player_old_enough(src.client)) - return 0 + return JOB_UNAVAILABLE_BANNED + if(!job.player_old_enough(client)) + return JOB_UNAVAILABLE_ACCOUNTAGE if(job.required_playtime_remaining(client)) - return 0 - return 1 - + return JOB_UNAVAILABLE_PLAYTIME + return JOB_AVAILABLE /mob/dead/new_player/proc/AttemptLateSpawn(rank) - if(!IsJobAvailable(rank)) - alert(src, "[rank] is not available. Please try another.") + var/error = IsJobUnavailable(rank) + if(error != JOB_AVAILABLE) + alert(src, get_job_unavailable_error_message(error, rank)) return FALSE if(SSticker.late_join_disabled) @@ -405,7 +421,7 @@ var/available_job_count = 0 for(var/datum/job/job in SSjob.occupations) - if(job && IsJobAvailable(job.title)) + if(job && IsJobUnavailable(job.title) == JOB_AVAILABLE) available_job_count++; @@ -428,7 +444,7 @@ dat += "