mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-18 12:44:15 +01:00
473cf50271
## About The Pull Request Is this user a donator validation was being done in the `deserialize` proc for the pref which is bad because if someone was auto reconnected to the server after restart and joins right as it restarts it'll be run before the ranks system has loaded meaning this check will always fail and remove the item from their loadout. Moved the validation to when the player spawns in, so ranks is guaranteed to be loaded. Also changed something that was checking the donator list directly to use the proc for it. Also removed two unused variables that got deprecated in #3747 ## Why It's Good For The Game Fixes #3773 ## Proof Of Testing Tested it on a local before and after ## Changelog 🆑 fix: fixed donator-only loadout items disappearing from donator's loadouts /🆑
68 lines
2.8 KiB
Plaintext
68 lines
2.8 KiB
Plaintext
/datum/preference/loadout
|
|
savefile_key = "loadout_list"
|
|
savefile_identifier = PREFERENCE_CHARACTER
|
|
priority = PREFERENCE_PRIORITY_LOADOUT
|
|
can_randomize = FALSE
|
|
// BUBBER NOTE: This isn't accurate, this is now an assoc list of names to the stuff below. Yeah. - Rimi, the pref code slaughterer
|
|
// Loadout preference is an assoc list [item_path] = [loadout item information list]
|
|
//
|
|
// it may look something like
|
|
// - list(/obj/item/glasses = list())
|
|
// or
|
|
// - list(/obj/item/plush/lizard = list("name" = "Tests-The-Loadout", "color" = "#FF0000"))
|
|
|
|
// Loadouts are applied with job equip code.
|
|
/datum/preference/loadout/apply_to_human(mob/living/carbon/human/target, value)
|
|
return
|
|
|
|
// Sanitize on load to ensure no invalid paths from older saves get in
|
|
/datum/preference/loadout/deserialize(input, datum/preferences/preferences)
|
|
return sanitize_loadout_list(input, preferences.parent?.mob, preferences.parent) // SKYRAT EDIT CHANGE parent
|
|
|
|
// Default value is null - the loadout list is a lazylist
|
|
/datum/preference/loadout/create_default_value(datum/preferences/preferences)
|
|
return null
|
|
|
|
/datum/preference/loadout/is_valid(value)
|
|
return isnull(value) || islist(value)
|
|
|
|
/**
|
|
* Removes all invalid paths from loadout lists.
|
|
* This is a general sanitization for preference loading.
|
|
*
|
|
* Returns a list, or null if empty
|
|
*/
|
|
/datum/preference/loadout/proc/sanitize_loadout_list(list/passed_list, mob/optional_loadout_owner, client/owner_client) as /list // SKYRAT EDIT CHANGE - client/owner_client
|
|
var/list/sanitized_list
|
|
for(var/path in passed_list)
|
|
// Loading from json has each path in the list as a string that we need to convert back to typepath
|
|
var/obj/item/real_path = istext(path) ? text2path(path) : path
|
|
if(!ispath(real_path, /obj/item))
|
|
if(optional_loadout_owner)
|
|
to_chat(optional_loadout_owner, span_boldnotice("The following invalid item path was found \
|
|
in your character loadout: [real_path || "null"]. \
|
|
It has been removed, renamed, or is otherwise missing - \
|
|
You may want to check your loadout settings."))
|
|
continue
|
|
|
|
else if(!istype(GLOB.all_loadout_datums[real_path], /datum/loadout_item))
|
|
if(optional_loadout_owner)
|
|
to_chat(optional_loadout_owner, span_boldnotice("The following invalid loadout item was found \
|
|
in your character loadout: [real_path || "null"]. \
|
|
It has been removed, renamed, or is otherwise missing - \
|
|
You may want to check your loadout settings."))
|
|
continue
|
|
|
|
// SKYRAT EDIT ADDITION
|
|
else if(owner_client)
|
|
var/datum/loadout_item/loadout_item = GLOB.all_loadout_datums[real_path]
|
|
if(loadout_item?.ckeywhitelist && !(owner_client?.ckey in loadout_item.ckeywhitelist))
|
|
continue
|
|
// SKYRAT EDIT END
|
|
|
|
// Set into sanitize list using converted path key
|
|
var/list/data = passed_list[path]
|
|
LAZYSET(sanitized_list, real_path, LAZYLISTDUPLICATE(data))
|
|
|
|
return sanitized_list
|