diff --git a/code/controllers/subsystems/job.dm b/code/controllers/subsystems/job.dm index e03c0da2f79..fd89a180e8b 100644 --- a/code/controllers/subsystems/job.dm +++ b/code/controllers/subsystems/job.dm @@ -102,9 +102,7 @@ if(jobban_isbanned(player, rank)) return FALSE - var/character_age = player.client.prefs.age - var/datum/species/species = global.all_species[player.client.prefs.species] - if((character_age < job.minimum_character_age) && !(species.spawn_flags & NO_AGE_MINIMUM)) + if(!(rank in player.client.prefs.GetValidTitles(job))) to_chat(player, "Your character is too young!") return FALSE diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 365680984b5..19bd4a22558 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -19,6 +19,7 @@ var/department = null // Does this position have a department tag? var/head_position = 0 // Is this position Command? var/minimum_character_age = 17 + var/list/alt_ages = null // assoc list of alt titles to minimum character ages var/ideal_character_age = 30 var/latejoin_at_spawnpoints = FALSE //If this job should use roundstart spawnpoints for latejoin (offstation jobs etc) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 2253402debb..82394084d6d 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -61,6 +61,7 @@ access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_pharmacy, access_virology, access_genetics, access_eva) minimal_access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_genetics, access_eva) alt_titles = list("Surgeon","Emergency Physician","Nurse") + alt_ages = list("Nurse" = 25) outfit = /datum/outfit/job/doctor alt_outfits = list( "Emergency Physician"=/datum/outfit/job/doctor/emergency_physician, @@ -210,7 +211,8 @@ economic_modifier = 4 minimum_character_age = 24 - + alt_ages = list("Emergency Medical Technician" = 20) + access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_pharmacy, access_virology, access_eva, access_maint_tunnels, access_external_airlocks, access_psychiatrist, access_paramedic) minimal_access = list(access_medical, access_medical_equip, access_morgue, access_eva, access_maint_tunnels, access_external_airlocks, access_paramedic) alt_titles = list("Emergency Medical Technician") @@ -253,7 +255,9 @@ selection_color = "#FF97D1" access = list(access_medical, access_surgery, access_medical_equip) minimal_access = list(access_medical, access_surgery, access_medical_equip) + minimum_character_age = 25 alt_titles = list("Medical Intern") + alt_ages = list("Medical Intern" = 18) outfit = /datum/outfit/job/intern_med /datum/outfit/job/intern_med diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm index c854ad618a6..e1b95d92625 100644 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ b/code/modules/client/preference_setup/occupation/occupation.dm @@ -136,6 +136,9 @@ var/alt_title = pref.player_alt_titles[job.title] if(alt_title && !(alt_title in job.alt_titles)) pref.player_alt_titles -= job.title + var/list/available = pref.GetValidTitles(job) + if(LAZYLEN(available) == 1) + SetPlayerAltTitle(job, LAZYACCESS(available, 1)) sanitize_faction() @@ -171,29 +174,28 @@ dat += "" var/rank = job.title lastJob = job + var/dispRank = LAZYACCESS(pref.GetValidTitles(job), 1) || rank var/ban_reason = jobban_isbanned(user, rank) - var/character_age = user.client.prefs.age - var/datum/species/species = global.all_species[user.client.prefs.species] if(ban_reason == "WHITELISTED") - dat += "[rank] \[WHITELISTED]" + dat += "[dispRank] \[WHITELISTED]" continue else if (ban_reason == "AGE WHITELISTED") var/available_in_days = player_old_enough_for_role(user.client, rank) - dat += "[rank] \[IN [(available_in_days)] DAYS]" + dat += "[dispRank] \[IN [(available_in_days)] DAYS]" + continue + else if(!LAZYLEN(pref.GetValidTitles(job))) // we have no available jobs the character is old enough for + dat += "[dispRank] \[MINIMUM AGE: [LAZYLEN(job.alt_ages) ? min(job.alt_ages[min(job.alt_ages)], job.minimum_character_age) : job.minimum_character_age]]" continue else if (ban_reason) - dat += "[rank] \[BANNED]" - continue - else if((character_age < job.minimum_character_age) && !(species.spawn_flags & NO_AGE_MINIMUM)) - dat += "[rank] \[MINIMUM AGE: [job.minimum_character_age]]" + dat += "[dispRank] \[BANNED]" continue if((pref.job_civilian_low & ASSISTANT) && (rank != "Assistant")) - dat += "[rank]" + dat += "[dispRank]" continue if((rank in command_positions) || (rank == "AI"))//Bold head jobs - dat += "[rank]" + dat += "[dispRank]" else - dat += "[rank]" + dat += "[dispRank]" dat += "" @@ -217,7 +219,7 @@ dat += " \[Low]" else dat += " \[NEVER]" - if(job.alt_titles) + if(job.alt_titles && (LAZYLEN(pref.GetValidTitles(job)) > 1)) dat += " \[[pref.GetPlayerAltTitle(job)]\]" dat += "" @@ -236,7 +238,7 @@ . = dat.Join() -/datum/category_item/player_setup_item/occupation/OnTopic(href, href_list, user) +/datum/category_item/player_setup_item/occupation/OnTopic(href, href_list, mob/user) if(href_list["reset_jobs"]) ResetJobs() return TOPIC_REFRESH @@ -250,12 +252,15 @@ else if(href_list["select_alt_title"]) var/datum/job/job = locate(href_list["select_alt_title"]) - if (job) - var/choices = list(job.title) + job.alt_titles - var/choice = input("Choose an title for [job.title].", "Choose Title", pref.GetPlayerAltTitle(job)) as anything in choices|null - if(choice && CanUseTopic(user)) - SetPlayerAltTitle(job, choice) - return TOPIC_REFRESH + if (!job) + return ..() + var/list/choices = pref.GetValidTitles(job) + if(!LAZYLEN(choices)) + return ..()// should never happen + var/choice = input("Choose an title for [job.title].", "Choose Title", pref.GetPlayerAltTitle(job)) as anything in choices|null + if(choice && CanUseTopic(user)) + SetPlayerAltTitle(job, choice) + return TOPIC_REFRESH else if(href_list["set_job"]) if(SetJob(user, href_list["set_job"])) @@ -425,6 +430,18 @@ /datum/preferences/proc/GetPlayerAltTitle(datum/job/job) return player_alt_titles[job.title] || job.title +/datum/preferences/proc/GetValidTitles(datum/job/job) + if (!job) + return + var/choices = list(job.title) + job.alt_titles + if((global.all_species[src.species].spawn_flags & NO_AGE_MINIMUM)) + return choices + for(var/t in choices) + if (src.age >= (LAZYACCESS(job.alt_ages, t) || job.minimum_character_age)) + continue + choices -= t + return choices + /datum/preferences/proc/GetJobDepartment(var/datum/job/job, var/level) if(!job || !level) return 0 switch(job.department_flag) diff --git a/code/modules/mob/abstract/new_player/new_player.dm b/code/modules/mob/abstract/new_player/new_player.dm index fcfaa399ba5..69194473257 100644 --- a/code/modules/mob/abstract/new_player/new_player.dm +++ b/code/modules/mob/abstract/new_player/new_player.dm @@ -283,9 +283,7 @@ INITIALIZE_IMMEDIATE(/mob/abstract/new_player) if (!(job.type in faction.allowed_role_types)) return FALSE - var/character_age = client.prefs.age - var/datum/species/species = global.all_species[client.prefs.species] - if((character_age < job.minimum_character_age) && !(species.spawn_flags & NO_AGE_MINIMUM)) + if(!(rank in client.prefs.GetValidTitles(job))) // does age/species check for us! return FALSE return TRUE @@ -388,9 +386,9 @@ INITIALIZE_IMMEDIATE(/mob/abstract/new_player) var/active = 0 // Only players with the job assigned and AFK for less than 10 minutes count as active for(var/mob/M in player_list) //Added isliving check here, so it won't check ghosts and qualify them as active - if(isliving(M) && M.mind && M.client && M.mind.assigned_role == job.title && M.client.inactivity <= 10 * 60 * 10) + if(isliving(M) && M.mind && M.client && M.mind.assigned_role == job.title && M.client.inactivity <= 10 MINUTES) active++ - dat += "[job.title] ([job.current_positions]) (Active: [active])
" + dat += "[client.prefs.GetPlayerAltTitle(job)] ([job.current_positions]) (Active: [active])
" dat += "" send_theme_resources(src) diff --git a/html/changelogs/MDP-fineokay.yml b/html/changelogs/MDP-fineokay.yml new file mode 100644 index 00000000000..94a1c2f586c --- /dev/null +++ b/html/changelogs/MDP-fineokay.yml @@ -0,0 +1,7 @@ +author: MoondancerPony +delete-after: True +changes: + - bugfix: "Job age requirements now take into account alt titles. Alt titles are automatically limited to only ones a character is old enough for." + - bugfix: "The latejoin screen now shows what alt-title you have selected." + - tweak: "The occupation preferences screen now functions differently if only one alt-title is available, or if the base job is not available." + - backend: "Tidies up the job age requirement system." \ No newline at end of file