diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm index b7322645be..60eeeb144e 100644 --- a/code/modules/client/preference_setup/global/02_settings.dm +++ b/code/modules/client/preference_setup/global/02_settings.dm @@ -81,29 +81,33 @@ return ..() /client/proc/is_preference_enabled(var/preference) - if(ispath(preference)) - var/datum/client_preference/cp = get_client_preference_by_type(preference) - preference = cp.key - - return (preference in prefs.preferences_enabled) + var/datum/client_preference/cp = get_client_preference(preference) + return cp && (cp.key in prefs.preferences_enabled) /client/proc/set_preference(var/preference, var/set_preference) - var/datum/client_preference/cp - if(ispath(preference)) - cp = get_client_preference_by_type(preference) - else - cp = get_client_preference_by_key(preference) - + var/datum/client_preference/cp = get_client_preference(preference) if(!cp) return FALSE + preference = cp.key + + if(set_preference && !(preference in prefs.preferences_enabled)) + return toggle_preference(cp) + else if(!set_preference && (preference in prefs.preferences_enabled)) + return toggle_preference(cp) + +/client/proc/toggle_preference(var/preference, var/set_preference) + var/datum/client_preference/cp = get_client_preference(preference) + if(!cp) + return FALSE + preference = cp.key var/enabled - if(set_preference && !(preference in prefs.preferences_enabled)) - prefs.preferences_enabled += preference + if(preference in prefs.preferences_disabled) + prefs.preferences_enabled |= preference prefs.preferences_disabled -= preference enabled = TRUE . = TRUE - else if(!set_preference && (preference in prefs.preferences_enabled)) + else if(preference in prefs.preferences_enabled) prefs.preferences_enabled -= preference prefs.preferences_disabled |= preference enabled = FALSE diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm index 5ccffdba8c..d15eda17d9 100644 --- a/code/modules/client/preference_setup/global/setting_datums.dm +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -11,6 +11,13 @@ var/list/_client_preferences_by_type _client_preferences += new client_type() return _client_preferences +/proc/get_client_preference(var/datum/client_preference/preference) + if(istype(preference)) + return preference + if(ispath(preference)) + return get_client_preference_by_type(preference) + return get_client_preference_by_key(preference) + /proc/get_client_preference_by_key(var/preference) if(!_client_preferences_by_key) _client_preferences_by_key = list() @@ -129,6 +136,7 @@ var/list/_client_preferences_by_type ********************/ /datum/client_preference/admin/may_toggle(var/mob/preference_mob) return check_rights(R_ADMIN, 0, preference_mob) + /datum/client_preference/mod/may_toggle(var/mob/preference_mob) return check_rights(R_MOD|R_ADMIN, 0, preference_mob)