From ea579b2da68eff0c207ef8c6d4f93f85391b9385 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Fri, 4 Mar 2016 21:52:41 +0100 Subject: [PATCH] Preferences now store client key instead of the client itself. For reasons unbeknown to me, the client var is reset when the client logs outs and thus the preference mob cease to be. Now stores the client key, and acquires the appropriate mob based on that, if possible. Also removes the sanitation check because the holder isn't set before the preferences are created. Fixes #12341. --- .../client/preference_setup/global/02_settings.dm | 7 +++++++ .../client/preference_setup/preference_setup.dm | 11 +++++------ code/modules/client/preferences.dm | 12 +++++++++++- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm index c44f9c4e44..2e1c058138 100644 --- a/code/modules/client/preference_setup/global/02_settings.dm +++ b/code/modules/client/preference_setup/global/02_settings.dm @@ -25,10 +25,13 @@ continue pref.preferences += client_pref.key +<<<<<<< HEAD for(var/preference in pref.preferences) if(!get_client_preference_by_key(preference)) pref.preferences -= preference +======= +>>>>>>> 19b7ebf... Preferences now store client key instead of the client itself. pref.lastchangelog = sanitize_text(pref.lastchangelog, initial(pref.lastchangelog)) pref.default_slot = sanitize_integer(pref.default_slot, 1, config.character_slots, initial(pref.default_slot)) @@ -50,7 +53,11 @@ . += "" . += "" +<<<<<<< HEAD return jointext(.) +======= + return jointext(., "") +>>>>>>> 19b7ebf... Preferences now store client key instead of the client itself. /datum/category_item/player_setup_item/player_global/settings/OnTopic(var/href,var/list/href_list, var/mob/user) var/mob/pref_mob = preference_mob() diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm index 81c1f4c463..f02ecddc7b 100644 --- a/code/modules/client/preference_setup/preference_setup.dm +++ b/code/modules/client/preference_setup/preference_setup.dm @@ -212,13 +212,13 @@ /datum/category_item/player_setup_item/Topic(var/href,var/list/href_list) if(..()) return 1 - var/mob/user = usr - if(!user.client) + var/mob/pref_mob = preference_mob() + if(!pref_mob || !pref_mob.client) return 1 - . = OnTopic(href, href_list, user) + . = OnTopic(href, href_list, usr) if(. == TOPIC_REFRESH) - user.client.prefs.ShowChoices(user) + pref_mob.client.prefs.ShowChoices(usr) /datum/category_item/player_setup_item/CanUseTopic(var/mob/user) return 1 @@ -227,5 +227,4 @@ return TOPIC_NOACTION /datum/category_item/player_setup_item/proc/preference_mob() - if(pref && pref.client && pref.client.mob) - return pref.client.mob + return get_mob_by_key(pref.client_ckey) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f000ccfe7d..288e7bffcb 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -109,10 +109,14 @@ datum/preferences // OOC Metadata: var/metadata = "" +<<<<<<< HEAD // Communicator identity data var/communicator_visibility = 0 var/client/client = null +======= + var/client_ckey = null +>>>>>>> 19b7ebf... Preferences now store client key instead of the client itself. var/datum/category_collection/player_setup_collection/player_setup @@ -125,7 +129,7 @@ datum/preferences gear = list() if(istype(C)) - client = C + client_ckey = C.ckey if(!IsGuestKey(C.key)) load_path(C.ckey) if(load_preferences()) @@ -186,6 +190,12 @@ datum/preferences /datum/preferences/proc/ShowChoices(mob/user) if(!user || !user.client) return + + if(!get_mob_by_key(client_ckey)) + user << "No mob exists for the given client!" + close_load_dialog(user) + return + var/dat = "
" if(path)