diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 47115b12cdf..9aedf10cc3e 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -242,6 +242,7 @@ GLOBAL_LIST_INIT(book_types, typecacheof(list( // Jobs +#define is_job(job_type) (istype(job_type, /datum/job)) #define is_assistant_job(job_type) (istype(job_type, /datum/job/assistant)) #define is_bartender_job(job_type) (istype(job_type, /datum/job/bartender)) #define is_captain_job(job_type) (istype(job_type, /datum/job/captain)) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 261ac01c050..af25ef851ca 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -102,6 +102,18 @@ set_current(null) return ..() + +/datum/mind/vv_edit_var(var_name, var_value) + switch(var_name) + if(NAMEOF(src, assigned_role)) + set_assigned_role(var_value) + . = TRUE + if(!isnull(.)) + datum_flags |= DF_VAR_EDITED + return + return ..() + + /datum/mind/proc/set_current(mob/new_current) if(new_current && QDELETED(new_current)) CRASH("Tried to set a mind's current var to a qdeleted mob, what the fuck") @@ -534,7 +546,7 @@ if (!new_job) to_chat(usr, span_warning("Job not found.")) return - set_assigned_role(new_role) + set_assigned_role(new_job) else if (href_list["memory_edit"]) var/new_memo = stripped_multiline_input(usr, "Write new memory", "Memory", memory, MAX_MESSAGE_LEN) @@ -854,6 +866,8 @@ /datum/mind/proc/set_assigned_role(datum/job/new_role) if(assigned_role == new_role) return + if(!is_job(new_role)) + CRASH("set_assigned_role called with invalid role: [isnull(new_role) ? "null" : new_role]") . = assigned_role assigned_role = new_role