/datum/preferences
var/list/all_underwear
var/list/all_underwear_metadata
/datum/category_item/player_setup_item/general/equipment
name = "Equipment"
sort_order = 4
/datum/category_item/player_setup_item/general/equipment/load_character(var/savefile/S)
S["all_underwear"] >> pref.all_underwear
S["all_underwear_metadata"] >> pref.all_underwear_metadata
S["backbag"] >> pref.backbag
S["backbag_style"] >> pref.backbag_style
/datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S)
S["all_underwear"] << pref.all_underwear
S["all_underwear_metadata"] << pref.all_underwear_metadata
S["backbag"] << pref.backbag
S["backbag_style"] << pref.backbag_style
/datum/category_item/player_setup_item/general/equipment/gather_load_query()
return list(
"ss13_characters" = list(
"vars" = list(
"all_underwear",
"all_underwear_metadata",
"backbag",
"backbag_style"
),
"args" = list("id")
)
)
/datum/category_item/player_setup_item/general/equipment/gather_load_parameters()
return list("id" = pref.current_character)
/datum/category_item/player_setup_item/general/equipment/gather_save_query()
return list(
"ss13_characters" = list(
"all_underwear",
"all_underwear_metadata",
"backbag",
"backbag_style",
"id" = 1,
"ckey" = 1
)
)
/datum/category_item/player_setup_item/general/equipment/gather_save_parameters()
return list(
"all_underwear" = json_encode(pref.all_underwear),
"all_underwear_metadata" = json_encode(pref.all_underwear_metadata),
"backbag" = pref.backbag,
"backbag_style" = pref.backbag_style,
"id" = pref.current_character,
"ckey" = PREF_CLIENT_CKEY
)
/datum/category_item/player_setup_item/general/equipment/sanitize_character(var/sql_load = 0)
if (sql_load)
pref.backbag = text2num(pref.backbag)
pref.backbag_style = text2num(pref.backbag_style)
if(istext(pref.all_underwear))
var/before = pref.all_underwear
try
pref.all_underwear = json_decode(pref.all_underwear)
catch(var/exception/e)
log_debug("UNDERWEAR: Caught [e]. Initial value: [before]")
pref.all_underwear = list()
if(istext(pref.all_underwear_metadata))
var/before = pref.all_underwear_metadata
try
pref.all_underwear_metadata = json_decode(pref.all_underwear_metadata)
catch(var/exception/e)
log_debug("UNDERWEAR METADATA: Caught [e]. Initial value: [before]")
pref.all_underwear_metadata = list()
if(!istype(pref.all_underwear))
pref.all_underwear = list()
for(var/datum/category_group/underwear/WRC in global_underwear.categories)
for(var/datum/category_item/underwear/WRI in WRC.items)
if(WRI.is_default(pref.gender ? pref.gender : MALE))
pref.all_underwear[WRC.name] = WRI.name
break
if(!istype(pref.all_underwear_metadata))
pref.all_underwear_metadata = list()
for(var/underwear_category in pref.all_underwear)
var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[underwear_category]
if(!UWC)
pref.all_underwear -= underwear_category
else
var/datum/category_item/underwear/UWI = UWC.items_by_name[pref.all_underwear[underwear_category]]
if(!UWI)
pref.all_underwear -= underwear_category
for(var/underwear_metadata in pref.all_underwear_metadata)
if(!(underwear_metadata in pref.all_underwear))
pref.all_underwear_metadata -= underwear_metadata
pref.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag))
pref.backbag_style = sanitize_integer(pref.backbag_style, 1, backbagstyles.len, initial(pref.backbag_style))
/datum/category_item/player_setup_item/general/equipment/content()
. = list()
. += "Equipment:
"
for(var/datum/category_group/underwear/UWC in global_underwear.categories)
var/item_name = pref.all_underwear[UWC.name] ? pref.all_underwear[UWC.name] : "None"
. += "[UWC.name]: [item_name]"
var/datum/category_item/underwear/UWI = UWC.items_by_name[item_name]
if(UWI)
for(var/datum/gear_tweak/gt in UWI.tweaks)
. += " [gt.get_contents(get_metadata(UWC.name, gt))]"
. += "
"
. += "Backpack Type: [backbaglist[pref.backbag]]
"
. += "Backpack Style: [backbagstyles[pref.backbag_style]]
"
return jointext(., null)
/datum/category_item/player_setup_item/general/equipment/proc/get_metadata(var/underwear_category, var/datum/gear_tweak/gt)
var/metadata = pref.all_underwear_metadata[underwear_category]
if(!metadata)
metadata = list()
pref.all_underwear_metadata[underwear_category] = metadata
var/tweak_data = metadata["[gt]"]
if(!tweak_data)
tweak_data = gt.get_default()
metadata["[gt]"] = tweak_data
return tweak_data
/datum/category_item/player_setup_item/general/equipment/proc/set_metadata(var/underwear_category, var/datum/gear_tweak/gt, var/new_metadata)
var/list/metadata = pref.all_underwear_metadata[underwear_category]
metadata["[gt]"] = new_metadata
/datum/category_item/player_setup_item/general/equipment/OnTopic(var/href,var/list/href_list, var/mob/user)
if(href_list["change_backpack"])
var/new_backbag = input(user, "Choose your character's bag type:", "Character Preference", backbaglist[pref.backbag]) as null|anything in backbaglist
if(!isnull(new_backbag) && CanUseTopic(user))
pref.backbag = backbaglist.Find(new_backbag)
return TOPIC_REFRESH
else if(href_list["change_backpack_style"])
var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference", backbagstyles[pref.backbag_style]) as null|anything in backbagstyles
if(!isnull(new_backbag) && CanUseTopic(user))
pref.backbag_style = backbagstyles.Find(new_backbag)
return TOPIC_REFRESH
else if(href_list["change_underwear"])
var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[href_list["change_underwear"]]
if(!UWC)
return TOPIC_NOACTION
var/datum/category_item/underwear/selected_underwear = input(user, "Choose underwear:", "Character Preference", pref.all_underwear[UWC.name]) as null|anything in UWC.items
if(selected_underwear && CanUseTopic(user))
pref.all_underwear[UWC.name] = selected_underwear.name
return TOPIC_REFRESH
else if(href_list["underwear"] && href_list["tweak"])
var/underwear = href_list["underwear"]
if(!(underwear in pref.all_underwear))
return TOPIC_NOACTION
var/datum/gear_tweak/gt = locate(href_list["tweak"])
if(!gt)
return TOPIC_NOACTION
var/new_metadata = gt.get_metadata(usr, get_metadata(underwear, gt))
if(new_metadata)
set_metadata(underwear, gt, new_metadata)
return TOPIC_REFRESH
return ..()